2010-12-08 89 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