【发布时间】:2011-04-29 09:50:09
【问题描述】:
我正在尝试通过负载平衡器在 IIS 6 上通过 SSL 启动 WCF 服务。我最初的问题是一个明显且很好讨论的问题 - WSDL 页面上显示的地址指向https://SERVERNAME/WebServices/mydomainws.svc 而不是 www.mydomain.com。这个问题的答案是在 IIS 中添加一个主机头值。我做到了,它奏效了……有点。在浏览器中查看 wsdl 时,我现在得到 http://www.mydomain.com/WebServices/mydomainws.svc。如果我单击该链接(非 ssl 链接),我会得到一个再次引用服务器名称的服务定义。
下一个经常推荐的补救措施是使用WCF Extras,它提供了一个允许您指定基地址的扩展。但是设置该配置条目只更新了soap12:地址。 EndPointReference 地址仍在使用机器名称。
总结一下:在https://www.mydomain.com/WebServices/mydomainws.svc 的网络浏览器中查看的 WSDL:http://www.mydomain.com/WebServices/mydomainws.scv
单击上面的链接将我带到一个带有以下服务条目的实际 wsdl 文件:
https://ServerName/WebServices/mydomainws.svc
我的服务器配置文件包含以下 serviceModel 条目:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<message clientCredentialType="None"/>
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="mydomain.ws.mydomainws" behaviorConfiguration="mydomainwsBehavior">
<!-- Service Endpoints -->
<endpoint address="" **behaviorConfiguration="CorrectEndPoint"** binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="mydomain.ws.Imydomainws"/>
<endpoint address="mex" **behaviorConfiguration="CorrectEndPoint"** binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mydomainwsBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
**<behavior name="CorrectEndPoint">
<wsdlExtensions location="https://www.mydomain.com/WebServices/mydomainws.svc" singleFile="true"/>
</behavior>**
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<extensions>
<behaviorExtensions>
<add name="wsdlExtensions" type="WCFExtras.Wsdl.WsdlExtensionsConfig, WCFExtras, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
谁能指出我正确的方向?
谢谢,
乔治
【问题讨论】:
-
值得注意的是:当我从 wsHttpBinding 切换到 basicHttpBinding 时,问题就消失了。无论如何,我必须这样做,因为我的调用者在 .net 2.0 上并且不能使用 wsHttpBinding 服务。我相信我仍然需要参考 WCF Extras 扩展。