gpt4 book ai didi

c# - WCF 服务代理生成在通过 F5 负载平衡器公开时引发错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:57 24 4
gpt4 key购买 nike

我正在从公司网络向公共(public)网络公开我的服务。

我的证书是 *.mydomain.com,这是一个通用证书。

我的服务负载均衡器 url 是:

https://myservice.mydomain.com/service1.svc

我有两个应用服务器,它们的 url 是:

http://myservice1.mydomain.com/service1.svc http://myservice2.mydomain.com/service1.svc

我们使用来自 F5 负载均衡器的 SSL 卸载。因此,从外部世界到 F5 LB,它是 https,从 LB 到应用程序服务器是它的 http。我们在 F5 LB 配置了证书。

当我在浏览器上点击 LB 服务 url 时,我得到“服务已创建页面”

MyService Service

You have created a service.

To test this service, you will need to create a client and use it to call the service. You can do this using the svcutil.exe tool from the command line with the following syntax:

svcutil.exe http://myservice.mydomain.com/service1.svc?wsdl

You can also access the service description as a single file:

http://myservice.mydomain.com/service1.svc?singleWsdl

当我使用负载均衡器 url 从我的客户端应用程序添加服务引用时,出现以下错误:

The document was understood, but it could not be processed.
- The WSDL document contains links that could not be resolved.
- There was an error downloading 'http://myservice.mydomain.com/service1.svc?wsdl=wsdl0'.
- Unable to connect to the remote server
- No connection could be made because the target machine actively refused it 207.187.164.30:80
Metadata contains a reference that cannot be resolved: 'https://myservice.mydomain.com/service1.svc?wsdl'.
Metadata contains a reference that cannot be resolved: 'https://myservice.mydomain.com/service1.svc?wsdl'.
If the service is defined in the current solution, try building the solution and adding the service reference again.

但是当我直接从网络内部访问我的两个应用程序服务器 url 时,我能够生成生成的代理并且我的服务工作得很好但是当我尝试通过 LB url 在网络外部生成代理时,我得到了上面的内容提到的错误。

我的服务绑定(bind)是:

<service behaviorConfiguration="DefaultBehavior" name="MyServices.MyService">
<endpoint binding="wsHttpBinding" contract="MyServices.IMyService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

相应的行为是:

<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<errorHandler/>
</behavior>

请帮我解决这个问题

最佳答案

虽然我将来 self 的节点的服务公开为 http,但 F5 LB 正在做 ssl 卸载的繁重工作,所以我来自 F5 LB 的服务是 https。由于我通过节点的 http 方案公开元数据,而 F5 LB 不支持 http 方案,因此通过 F5 LB 在 http url 上生成 wsdl 被阻止,因此我无法生成代理。

后来我从我的基础架构团队了解到,在生产中向客户端公开元数据是一个安全问题,因此我们阻止了它。

那么现在的问题是,当我们不公开元数据端点时,客户端如何使用服务?简单的答案是使用 channel 工厂并通过 F5 LB 的 https url 创建代理和调用服务方法。这就是我解决问题的方法。

关于c# - WCF 服务代理生成在通过 F5 负载平衡器公开时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807133/

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