我正在使用ASP.NET 3.5
C#
。我的web-application
有一个WCF
。我已使用Bindings HTTP
和HTTPS
在服务器上部署了它。一切都运作良好。
今天我在同一网站上添加了另外两个HTTP
和HTTPS
的绑定,但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
上托管了另一个网站,该网站也有HTTP
和HTTPS
绑定。但我没有在这个网站上添加新的,WCF
调用工作正常。
任何猜测或解决方案? 提前谢谢..
答案 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:3546和http://testSite.com:3566是它们各自的方案的唯一基地址,它们将被允许传递,这意味着只需要WCF服务就可以用于这两个地址。 baseAddressPrefixFilter
不支持任何通配符。