添加新的HTTP和HTTPS绑定后,WCF停止在IIS 7上工作

时间:2014-01-08 06:57:47

标签: asp.net wcf iis iis-7 wcf-binding

我正在使用ASP.NET 3.5 C#。我的web-application有一个WCF。我已使用Bindings HTTPHTTPS在服务器上部署了它。一切都运作良好。

今天我在同一网站上添加了另外两个HTTPHTTPS的绑定,但with different host names。 (我已经注册了新域名,我已经用我的IP地址指出了这一点)。突然间,该网站的WCF停止了工作。

我在IIS中为两个网站执行了此操作,并且他们都在WCF调用时返回异常,但是login和所有其他网页都正常工作。

web.config的ServiceModel部分如下:

     <system.serviceModel>
        <bindings>
            <webHttpBinding>
                <binding name="webBindingHTTP">
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
                <binding name="webBindingHTTPS">
                    <security mode="Transport">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
            </webHttpBinding>
        </bindings>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
        </serviceHostingEnvironment>
        <behaviors>
            <endpointBehaviors>
                <behavior name="ihrole.service.remoteBehavior">
                    <webHttp />
                </behavior>
                <behavior name="webHttpEnabled">
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="ihrole.service.remoteBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="ihrole.service.remoteBehavior" name="ihrole.service.remote">
                <endpoint address="" behaviorConfiguration="ihrole.service.remoteBehavior" bindingConfiguration="webBindingHTTP" binding="webHttpBinding" contract="ihrole.service.Iremote" />
                <endpoint address="" behaviorConfiguration="ihrole.service.remoteBehavior" bindingConfiguration="webBindingHTTPS" binding="webHttpBinding" contract="ihrole.service.Iremote" />
            </service>
        </services>
    </system.serviceModel>

同样,我确实在同一个IIS上托管了另一个网站,该网站也有HTTPHTTPS绑定。但我没有在这个网站上添加新的,WCF调用工作正常。

任何猜测或解决方案? 提前谢谢..

1 个答案:

答案 0 :(得分:1)

在这里,您需要指定您的WCF服务可以在单个网站的所有绑定上运行。

在Asp.Net 3.5中,当一个网站有多个绑定时,您应该使用<baseAddressPrefixFilters>元素指定Pass through过滤器(为WCF服务添加基地址)。见下面的示例。 MSDN reference here.

<system.serviceModel>
    <serviceHostingEnvironment>
    ... 
        <baseAddressPrefixFilters>
            <add prefix="http://Testsite2.com:3546"/>
            <add prefix="http://testSite.com:3566"/>
        </baseAddressPrefixFilters>
   ...
    </serviceHostingEnvironment>
</system.serviceModel>

所以,这里http://Testsite2.com:3546http://testSite.com:3566是它们各自的方案的唯一基地址,它们将被允许传递,这意味着只需要WCF服务就可以用于这两个地址。 baseAddressPrefixFilter不支持任何通配符。