我的WCF Web服务正在引用本地文件

时间:2011-06-06 06:37:46

标签: wcf .net-4.0 wsdl

与ASMX Web服务不同,WCF Web服务似乎将WSDL分解为许多文件。

我的问题是,当我尝试从不是服务器的服务器生成代理时,它将转到WSDL但是在WSDL内部它将有许多导入,它无法访问在服务器外面。

例如。这是我的WSDL中的导入之一

http://alumninetworkservice.hha.test.idc:1315是内部地址 - 我无法从服务器外部访问它。有没有办法设置我的服务,以便这些WSDL引用将指向他们的互联网URL?

由于

编辑:我已粘贴下面的配置设置。

这是在服务器端。

  <system.serviceModel>
    <services>
      <service name="Alumni.WebService.IAlumniWebService">
        <endpoint binding="wsHttpBinding"
                  contract="Alumni.WebService.IAlumniWebService">
        </endpoint>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding maxReceivedMessageSize="2000000" >
          <readerQuotas  maxStringContentLength="2147483647"   />
          <security mode="Transport">
            <!--<transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
            <message clientCredentialType="None" algorithmSuite="Default" />-->
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"  />
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <useRequestHeadersForMetadataAddress />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

1 个答案:

答案 0 :(得分:2)

在服务配置中使用useRequestHeadersForMetadataAddress行为来克服此问题。默认情况下,WCF始终使用为WSDL中的端点定义的本地地址/ dns名称。该行为应使用传入主机头(公共地址)中的名称强制执行。

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <useRequestHeadersForMetadataAddress />
    </behavior>
  </serviceBehaviors>
</behaviors>