需要ASP.NET(3.5)ScriptManager的帮助才能通过AJAX调用WCF JSON数据吗
我正在尝试让ASP.NETFramework3.5、AJAX和JSON正常工作。我有两个问题。首先,当我按照ASP.NET的要求添加以下标记时:需要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
[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" %>