【发布时间】:2011-11-07 08:30:36
【问题描述】:
我目前正在维护和开发一个以 ajax 方式使用大量网络服务的网站。
服务的注册是在 aspx 中完成的,如下所示:
<asp:ScriptManagerProxy id="ScriptManager1" runat="server">
<services>
<asp:ServiceReference Path="WebServices/WSAdministrator.asmx"></asp:ServiceReference>
</services>
</asp:ScriptManagerProxy>
在 javascript 中使用服务是这样完成的
WSAdministrator.GetConsumerClubInfo(ConsumerClubId,
OnSucceededToGetConsumerClubInfo,
OnFailedToGetConsumerClubInfo);
我想知道我是否可以如此轻松地引用自托管 WCF 服务(在同一台机器上)。
有什么建议吗?
编辑:WCF 服务在 Windows 服务上运行,它公开了 webHttpBinding 和 basicHttpBinding 端点。
阅读ASP.Net WCF Service with no App_Code 后,我意识到我应该只创建一个 svc 文件作为对服务的引用。
我创建了这个 svc 文件:
<%@ ServiceHost Language="C#" Service="MyService.Namespace.Contract" %>
我在 web.config 文件中添加了以下几行:
<services>
<service name="MyService.Namespace.Contract">
<endpoint address="setAddress" binding="basicHttpBinding" contract="MyService.Namespace.ContractInterface"/>
</service>
</services>
地址正常,但是当我尝试从 svc 访问引用时,我收到以下错误:
类型'',作为服务属性值提供 找不到 ServiceHost 指令。
我在这里错过了什么?
注意: 有一些很好的答案,但是对于我已经知道的所有事情,我的问题是关于如何使用 asp.net 引用我的自托管 WCF 服务,以便我可以从javascript,仅此而已,对此我仍然没有答案...
我看到一些对类似问题的回复告诉应该有一个 IIS 托管服务充当实际服务的“管道”,然后 ScriptManager 应该引用它,也许这是唯一的答案。 ..
【问题讨论】:
-
我认为您可能将启用 AJAX 的 WCF 服务与通过 AJAX 调用 WCF 服务混为一谈?
-
嗯...也许我是?最后,我只想从 javascript 调用 WCF Web 服务,如问题中所述。它通过引用它的 asmx 文件与 asmx Web 服务一起工作,但现在我不知道要写什么 ServiceReference,因为我没有 svc 文件。
-
我也不确定。您是否尝试过将 Windows 服务主机定义的端点地址放入其中?我不知道这是否会奏效,但它可能会。另请注意,它需要在同一台机器(或同一域)上,因为您不能进行跨域调用。
-
您是否建议添加一个 basicHttpBinding 端点,然后向该地址添加一个 ServiceReference?我认为这里缺少一些东西......
-
没有。我建议尝试添加您的服务正在侦听的 URI(在 Window 服务的 app.config 文件中定义或在服务主机中以编程方式定义)并查看是否有效。您的 Windows 服务托管的 WCF 的端点地址是什么?
标签: asp.net ajax wcf web-services