通过SSL的Azure Web Service返回不正确的soap地址位置
我在Azure上通过SSL运行Cloud Service;我可以浏览到该服务,并得到其wsdl
通过SSL但是当我做了soap address location
返回错误 - 而不是使用绑定到该证书我得到的服务器名称通过SSL的Azure Web Service返回不正确的soap地址位置
<肥皂域名:地址位置=” HTTP:// rd00155d45cc3c/Amazon.svc “/>
我期待看到
<肥皂:地址位置=” 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 HTTP服务:// rd00155d45cc3c/Amazon.svc不可用
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>
谢谢;不知道为什么更多的人没有这个问题; 28/08/13仍未修复此修复程序。 – f0x 2013-08-28 20:43:09
因此,在评论有点老气,但请检查this article。
step 6
描述要添加什么行为(UseRequestHeadersForMeatadataAddress
)以及何时引入:KB981002- WCF:修补程序汇总升级。这将解决你的问题。
而KB981001是Windows的官方修补程序/更新。它必须安装在您的开发机器和部署服务的Windows Azure实例上。但是,如果您没有明确定位旧的Guest OS (specific osVersion),则必须已安装该修补程序。
添加'UseRequestHeadersForMetaDataAddress',并且**既启用了http和https计划,也获得域名,但只有**代表http。当我删除http的方案时,为了强制SSL,只有服务器名称被再次使用,而不是我的域名。 – 2013-04-08 11:35:43
已安装[此修复程序(http://archive.msdn.microsoft.com/KB971842),还做您使用[UseRequestHeadersForMetadataAddress](http://zamd.net/2010/01/ 14/using-request-headers-for-metadata-address /)? – astaykov 2013-04-08 10:44:17
我在哪里可以在我的本地开发框中安装该修补程序?有关于此的消息>请注意,此修补程序并未经过完整的Microsoft产品回归测试,也未经过与其他修补程序的组合测试。 – 2013-04-08 11:06:13