需要ASP.NET(3.5)ScriptManager的帮助才能通过AJAX调用WCF JSON数据吗

需要ASP.NET(3.5)ScriptManager的帮助才能通过AJAX调用WCF JSON数据吗,asp.net,ajax,wcf,scriptmanager,Asp.net,Ajax,Wcf,Scriptmanager,我正在尝试让ASP.NETFramework3.5、AJAX和JSON正常工作。我有两个问题。首先,当我按照ASP.NET的要求添加以下标记时: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 我发现我不能将它添加到接口声明之上,只能添加到类之上。我希望这个代码是一个接口。有人能告诉我我做错了什么吗?错误如下: 属性 AspnetCo

我正在尝试让ASP.NETFramework3.5、AJAX和JSON正常工作。我有两个问题。首先,当我按照ASP.NET的要求添加以下标记时:

[AspNetCompatibilityRequirements(RequirementsMode = 
      AspNetCompatibilityRequirementsMode.Allowed)]
我发现我不能将它添加到接口声明之上,只能添加到类之上。我希望这个代码是一个接口。有人能告诉我我做错了什么吗?错误如下:

属性 AspnetCompatibility要求不适用 在此声明类型上有效。它是 仅对“类”声明有效

第二个问题是,在ASPX ScriptManager标记中:

 <asp:ScriptManager ID="ScriptManager1" runat="server">
 <Services>
 <asp:ServiceReference Path="?" />
 </Services>
 </asp:ScriptManager>
我注意到Path=属性应该指向一个.SVC文件。到目前为止,我已经 成功地使用了WCF类库来完成我所需要的。类库 有Trade.cs、TradeService.cs和ITradeService.cs文件,我编译后 在我的Web项目中引用为我的Web服务

那么,Path=应该指向什么呢?或者,我需要补充什么


我边走边学习,我感谢你的耐心。提前谢谢

关于第一个问题。该属性被定义为仅适用于类,因此不能在任何其他对象上声明它


路径应该指向服务正在侦听的端点,例如/services/myserivce。

路径应该是HTTP服务的服务端点:http://host.example.com/tradeservice.svc/method.


您只能将该属性应用于接口类的实现,而不能应用于接口本身。

关于第二个答案。我认为路径需要指向实际的webservice端点.svc或旧端点。。对不起,我忘记了我的头顶

您可以做的是创建一个WebService,TradeService.svc,并实现ITradeService接口。作为服务上的私有变量,创建TradeService的实例,并将其用作代理。。。像这样

private TradeService _proxy;

public string MyMethod(){
    _proxy.MyMethod();
}
讲道理

AspNetCompatibilityRequirementsAttribute.RequirementsMode不是必需的属性,可用于以编程方式设置宿主模式,也可以执行相同的操作 在webconfig中使用serviceHostingEnvironment标记: 参考:

您应该通过手动添加来在项目中添加service host.svc TradeService.svc。您也可以通过添加新项目>WCF来执行相同的操作 但这将覆盖您的服务cs文件。一旦你 添加了svc文件,然后可以添加以下行: 请注意,WebScriptServiceHostFactory将自动将ASP.NET Ajax端点添加到您的服务中。最后,将您的路径属性指向这个新创建的TradeService.svc

您可以通过访问来测试您的服务

Ajax支持可以在以下位置进行测试:

参考:


源代码:

你好,阿奎林,谢谢你。我理解了你所说的要点,但是我正在学习如何公开我在类库中创建的接口。我假设我需要向ITradeService添加一个USING指令,然后在DLL中引用接口方法MyMethod,然后在_proxy.MyMethod中使用它。我真的不知道该怎么做——在添加我拥有的WCF类库之后,你能告诉我ITradeService的代码应该是什么样子吗?我希望我在这里有意义。。。
private TradeService _proxy;

public string MyMethod(){
    _proxy.MyMethod();
}
<system.serviceModel> <serviceHostingEnvironment ..> </serviceHostingEnvironment> </system.serviceModel> <%@ ServiceHost Language="C#" Debug="true" Service="TradeService" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>