我有一个可以通过http端点访问的WCF Web服务。现在,该服务应通过https与负载均衡器一起发布。客户端是通过svcutil.exe在.Net中创建的,但Java客户端也需要WSDL。
我的理解是:
从其他帖子我了解到负载均衡器问题可以通过以下行为配置来解决:
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<!-- Use your own port numbers -->
<add scheme="http" port="81" />
<add scheme="https" port="444" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
使用此解决方法,我将两个URL解析为服务帮助页面,但调用 https :// loadbalancer.com/example.svc页面将我引导至 http :// loadbalancer.com/example.svc?wsdl。当我用https替换http时,我可以加载wsdl,但它的所有内部链接都是 http ,而不是 https 。
尝试切换httpsGetEnabled =“true”会导致我遇到很多与https相关的问题,我不知道这是否可以帮助我,因为我的服务器本身只知道http。
所以,我的问题是负载均衡URL的https。我可以告诉WCF它应该在WSDL元数据中显示https而不是http,我该怎么做?
答案 0 :(得分:0)
不,没办法告诉WCF在WSDL元数据中显示https而不是http。 我们的解决方案是,创建http和https endpointbindings,检查传入请求是否为http或https,传入请求类型确定将使用哪些端点绑定。
答案 1 :(得分:0)
之前我遇到过这个问题,修复程序几乎覆盖了SoapExtensionReflector方法名称:ReflectDescription。
using System.Web.Services.Description;
namespace LoadBalancer
{
public class HttpsSoapExtensionReflector : SoapExtensionReflector
{
public override void ReflectMethod()
{
//no-op
}
public override void ReflectDescription()
{
ServiceDescription description = ReflectionContext.ServiceDescription;
foreach (Service service in description.Services)
{
foreach (Port port in service.Ports)
{
foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
{
SoapAddressBinding binding = extension as SoapAddressBinding;
if (null != binding)
{
binding.Location = binding.Location.Replace("http://", "https://");//Updating the soap address binding location to use https
}
}
}
}
}
}
}
将上述类创建到新的或现有的dll项目中(在我的示例中,dll名称为LoadBalancer),您只需从服务器Web配置调用我们的新扩展名,如:
<webServices>
<soapExtensionReflectorTypes>
<add type="LoadBalancer.HttpsSoapExtensionReflector, LoadBalancer"/>
</soapExtensionReflectorTypes>
</webServices>
如果它在LoadBalancer下,那么它将继续并修改绑定位置,它将使用HTTPS url生成WSDL。 在SoapUI上测试并从Visual Studio添加服务引用(app.config将反映https)。 感谢