0

我在 Azure 上有一个通过 SSL 运行的云服务;我可以浏览到该服务并wsdl通过 SSL 获取它,但是当我这样做时soap address location返回错误 - 而不是使用绑定到证书的域名,我得到了服务器名称

<soap:address location="http://rd00155d45cc3c/Amazon.svc"/>

我期待看到

<soap:address location="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.svc 的 HTTP 服务不可用

4

2 回答 2

1

所以,评论有点陈旧,但请查看这篇文章

step 6描述要添加的行为 ( UseRequestHeadersForMeatadataAddress) 以及何时引入:KB981002- WCF:修补程序汇总更新。这将解决您的问题。

KB981001 是 Windows 的官方修补程序/更新。它必须安装在您的开发机器和部署服务的 Windows Azure 实例上。但是,如果您没有明确针对旧客户操作系统(特定 osVersion),则必须已安装该修补程序。

于 2013-04-08T11:17:17.577 回答
1

useRequestHeadersForMetadataAddress正如@astaykov 所建议的那样,我为解决方案提供了一些方法,但是为了能够获得wsdl我需要添加的过度 https

<protocolMapping>
    <add scheme="https" 
         binding="basicHttpBinding" 
         bindingConfiguration="BasicHttpBinding_IService1" />
</protocolMapping>

system.serviceModel我的配置中的部分,这为我在soap:address locationAzure 生成的 wsdl 中的元素中提供了正确的结果。

<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>
于 2013-04-25T11:34:41.117 回答