gpt4 book ai didi

WCF over IIS 通过负载平衡器报告错误的基地址

转载 作者:行者123 更新时间:2023-12-03 07:33:05 26 4
gpt4 key购买 nike

我正在尝试通过负载平衡器在 IIS 6 上通过 SSL 启动 WCF 服务。我最初的问题是一个明显且经过充分讨论的问题 - WSDL 页面上显示的地址指向 https://SERVERNAME/WebServices/mydomainws.svc而不是 www.mydomain.com。这个问题的答案是在 IIS 中添加一个主机头值。我这样做了,它起作用了......有点。我现在得到 http ://www.mydomain.com/WebServices/mydomainws.svc 在浏览器中查看 wsdl 时。如果我单击该链接(非 ssl 链接),我会得到一个再次引用服务器名称的服务定义。

下一个经常推荐的补救措施是使用 WCF Extras它提供了一个扩展,允许您指定一个基地址。但是设置该配置条目只会更新soap12:address。 EndPointReference 地址仍在使用机器名称。

总结一下:在 Web 浏览器中查看的 WSDL,网址为 https://www.mydomain.com/WebServices/mydomainws.svc : 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>

任何人都可以指出我正确的方向吗?
谢谢,
乔治

最佳答案

这应该由新行为处理 useRequestHeadersForMetadataAddress .尝试将其添加到您的服务行为中:

  <serviceBehaviors>
<behavior name="LoadBalancedBehavior">
<serviceMetadata httpGetEnabled="true" />
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="80" />
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>

<!-- Other service behaviors as necesary -->

</behavior>
</serviceBehaviors>

此行为在 WCF 4.0 中可用,并且应作为 WCF 3.x 的 KB 提供。

关于WCF over IIS 通过负载平衡器报告错误的基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com