与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>
答案 0 :(得分:2)
在服务配置中使用useRequestHeadersForMetadataAddress行为来克服此问题。默认情况下,WCF始终使用为WSDL中的端点定义的本地地址/ dns名称。该行为应使用传入主机头(公共地址)中的名称强制执行。
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</behaviors>