WCF在IIS中为Silverlight和AJAX托管服务

时间:2009-08-03 03:22:41

标签: wcf silverlight iis

我正在尝试在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。

1 个答案:

答案 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)。

马克