通过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不可用

+0

已安装[此修复程序(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

+0

我在哪里可以在我的本地开发框中安装该修补程序?有关于此的消息>请注意,此修补程序并未经过完整的Microsoft产品回归测试,也未经过与其他修补程序的组合测试。 – 2013-04-08 11:06:13

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> 
+0

谢谢;不知道为什么更多的人没有这个问题; 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),则必须已安装该修补程序。

+0

添加'UseRequestHeadersForMetaDataAddress',并且**既启用了http和https计划,也获得域名,但只有**代表http。当我删除http的方案时,为了强制SSL,只有服务器名称被再次使用,而不是我的域名。 – 2013-04-08 11:35:43