2010-12-08 112 views
0

我有一個asp.net應用程序,其中我使用了「在AJAX中調用WCF服務操作」方法。我完成了我的工作,但沒有在IIS中託管服務。我得到了正確的解決方案。但現在,我有另一個要求,我使用託管在本地主機iis上的WCF服務。但在點擊按鈕時,我得到了一個類似於對象的javascript錯誤。我不知道爲什麼會發生這種情況? 我的代碼如下所示。在AJAX中調用WCF服務操作

<fieldset style="width: 804px" align="center"> 
    <legend>Consuming WCF Service using Client-Side AJAX</legend> 
    <div align="left" style="text-align: center"> 
     <form id="form1" runat="server"> 
     <asp:ScriptManager ID="SM1" runat="server"> 
      <Services> 
       <asp:ServiceReference Path="http://localhost/WCFService/Service1.svc" /> 
       <%--~/Service1.svc--%> 
      </Services> 
     </asp:ScriptManager> 
     <input id="addNum1" type="text" size="3" /> 
     + 
     <input id="addNum2" type="text" size="3" /> 
     = 
     <input id="addAnswer" type="text" size="3" /><br /> 
     <input id="btnAddition" type="button" value="Do Addition" onclick="DoAddition()" /> 
     <br /> 
     <br /> 
     <input id="subtractNum1" type="text" size="3" /> 
     - 
     <input id="subtractNum2" type="text" size="3" /> 
     = 
     <input id="subtractAnswer" type="text" size="3" /><br /> 
     <input id="btnSubtraction" type="button" value="Do Subtraction" onclick="DoSubtraction()" /> 
     <br /> 
     <br /> 
     </form> 
    </div> 
</fieldset> 

<script language="javascript" type="text/javascript"> 

function DoAddition() { 
    Service1.Add(document.getElementById('addNum1').value, document.getElementById('addNum2').value, onAddSuccess); 
} 
function DoSubtraction() { 
    Service1.Subtract(document.getElementById('subtractNum1').value, document.getElementById('subtractNum2').value, onSubtractSuccess); 
} 

function onAddSuccess(result) { 
    document.getElementById('addAnswer').value = result; 
} 
function onSubtractSuccess(result) { 
    document.getElementById('subtractAnswer').value = result; 
} 

的JavaScript錯誤消息是這樣的

Picture

請幫我解決這個問題。

+0

是這個工作URL HTTP://localhost/WCFService/Service1.svc?能夠在瀏覽器中瀏覽? – RameshVel 2010-12-08 09:31:27

回答

1

問題是與java腳本,如Service1.Add..。生成的js代理的名稱不會是Service1,因此也是問題。代理對象的名稱格式爲[Namespace].[Contract Name],其中服務的名稱空間由ServiceContract屬性的Namespace參數聲明。如果您沒有指定,默認值是「tempuri.org」。例如,如果你的服務被定義爲

[ServiceContract(Namespace="Samples.Services")] 
public class Service1 
{ 
    [OperationContract] 
    public void Add(... 

然後在JS,你需要使用Sample.Services.Service1.Add