我有一个在Azure上通过SSL运行的云服务;我可以浏览到服务并通过SSL获得其wsdl
,但当我这样做时,soap address location
返回错误-而不是使用绑定到证书的域名,我得到服务器名称
& lt;soap:address location=" http://rd00155d45cc3c/Amazon.svc"/>
我期待看到
& lt;soap:地址位置= " https://azure.mydomain.com/Amazon.svc "/>
我的配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="AzureBinding">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyService">
<endpoint address="" binding="basicHttpBinding"
contract="StudentServiceWCF.IAmazon"
bindingConfiguration="AzureBinding" />
<endpoint address="mex" binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我的app.config客户端端点配置
<endpoint address="https://azure.mydomain.com/Amazon.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IOutOfDateSecure"
contract="AzureService.IAmazon" name="BasicHttpBinding_IAmazon" />
<binding name="BasicHttpBinding_IAmazon">
<security mode="Transport" />
</binding>
我不知道如何影响地址位置,所以它使用域名从我的证书。因为它返回了http位置,所以测试客户端抛出了一个异常:
位于http://rd00155d45cc3c/Amazon的HTTP服务。SVC不可用
所以,在评论中有点老,但检查这篇文章。
step 6
描述了要添加的行为(UseRequestHeadersForMeatadataAddress
)以及何时引入的:KB981002- WCF: Hotfix rollup update。这将解决你的问题。
KB981001是Windows的官方热修复/更新。它必须同时安装在你的开发机器和你部署服务的Windows Azure实例上。但是,如果您没有明确针对旧的来宾操作系统(特定的osVersion),则必须已经安装了该热修复程序。
useRequestHeadersForMetadataAddress
正如@astaykov建议的那样,我得到了一些解决方案的方法,但是为了能够通过https获得wsdl
,我需要添加
<protocolMapping>
<add scheme="https"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" />
</protocolMapping>
到我的配置中的system.serviceModel
部分,这给了我从Azure生成的wsdl中的soap:address location
元素的正确结果。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="AzureBinding">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyService">
<endpoint address="" binding="basicHttpBinding"
contract="StudentServiceWCF.IAmazon"
bindingConfiguration="AzureBinding" />
<endpoint address="mex" binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<protocolMapping>
<add scheme="https" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" />
</protocolMapping>
</system.serviceModel>