我目前正在维护和开发一个以ajax方式使用大量web服务的网站。
注册服务在 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应该引用它,也许这是唯一的答案。 ..
答案 0 :(得分:5)
当您自托管WCF服务时,不使用.SVC文件,而是以下列方式在Windows服务的OnStart方法中创建服务主机。
WebServiceHost myServiceHost = null;
if (myServiceHost != null)
{
myServiceHost.Close();
}
myServiceHost = new WebServiceHost(typeof(YourClassName));
myServiceHost.Open();
如果您想托管服务以支持WebHttpBinding,那么托管类应该是WebServiceHost,如果您想托管wsHttpBinding或其他任何你应该使用ServiceHost。
一旦服务开始运行,客户端就可以连接到它。
以下link包含逐步执行此操作的过程。
如果你必须支持能够使用AJAX和Jquery进行交谈的RESTful服务,那么你应该使用WebServiceHost,你将按照以下方式修改你的操作合同。
[ServiceContract()]
public interface IMyInterface
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "GetArray",
BodyStyle = WebMessageBodyStyle.Bare)]
MyArray[] GetArray();
}
您甚至可以在以下question中找到相关信息。
答案 1 :(得分:2)