我正在尝试在IIS7中托管一个WCF服务,该服务适用于Silverlight和GET请求。我有Silverlight端点工作,但无法解决如何在将处理来自AJAX客户端的GET请求的同一服务上创建其他端点。
我有第二个服务仅用于GET请求,它工作正常所以我的问题不是关于如何为GET请求设置端点,而是如何设置一个服务,其中有两个端点用于Silverlight请求和一个GET请求。
我的IIS web.config有:
<system.serviceModel>
<services>
<service name="MyAssembly.MyService">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="http://localhost/provisioning.svc" binding="basicHttpBinding" contract="MyAssembly.IMyService" />
<endpoint address="http://localhost/provisioningajax.svc" binding="webHttpBinding" contract="MyAssembly.IMyService" />
</service>
</services>
<system.serviceModel>
provisioning.svc和provisioningajax.svc文件具有相同的含义:
<% @ServiceHost Service="MyAssembly.MyService" %>
provisioning.svc端点可以与我的Silverlight客户端一起使用,但我无法使用provisioningajax.svc。尝试访问它时,我在应用程序事件日志中收到运行时错误和以下错误消息。
异常信息: 异常类型:InvalidOperationException 异常消息:带有合同的“http://localhost/provisioning.svc”的ChannelDispatcher“MyAssembly.IMyService”无法打开其IChannelListener。
答案 0 :(得分:3)
要为您的Ajax配置端点使用webHttpBinding,您需要在服务器上设置其他位和部分,例如“webHttp”行为,并且需要使用WebServiceHostFactory。
你做到了吗?
您需要将此代码段添加到服务器端配置中:
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
,用于Ajax配置的SVC文件应为:
<%@ServiceHost language="c#" Service="MyAssembly.MyService"
Factory="System.ServiceModel.WebServiceHostFactory" %>
注意“Factory =”设置 - 这是关键。您需要为webHttp使用WebServiceHostFactory(而不是用于其他绑定的直接,正常的ServiceHostFactory)。
马克