使用SSL的Azure Web服务返回不正确的soap地址位置



我有一个在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>

最新更新