我的WCF Web服务正在引用本地文件
与ASMX Web服务不同,WCF Web服务似乎将WSDL分解为许多文件 我的问题是,当我试图从不是服务器的服务器生成代理时,它将访问WSDL,但在WSDL的内部,它将有许多导入,无法从服务器外部访问 这是我的WSDL中的导入之一 是内部地址-我无法从服务器外部访问它。有没有一种方法可以设置我的服务,使这些WSDL引用指向它们的internet URL 谢谢 编辑:我已经粘贴了下面的配置设置 这是在服务器端我的WCF Web服务正在引用本地文件,wcf,.net-4.0,wsdl,Wcf,.net 4.0,Wsdl,与ASMX Web服务不同,WCF Web服务似乎将WSDL分解为许多文件 我的问题是,当我试图从不是服务器的服务器生成代理时,它将访问WSDL,但在WSDL的内部,它将有许多导入,无法从服务器外部访问 这是我的WSDL中的导入之一 是内部地址-我无法从服务器外部访问它。有没有一种方法可以设置我的服务,使这些WSDL引用指向它们的internet URL 谢谢 编辑:我已经粘贴了下面的配置设置 这是在服务器端 <system.serviceModel> <serv
<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>
在服务配置中使用行为来解决问题。默认情况下,WCF始终使用WSDL中为端点定义的本地地址/dns名称。该行为应强制使用传入主机头(公共地址)中的名称
另一种方法是只实现共享契约DLL,并避免完全使用服务引用。可能的重复:@Johann:那么解决方案是扁平化WSDL结构?没有办法让WCF只引用internet URL而不是内部URL吗?@stickman:这是一个可能的解决方案。您使用什么URL访问WSDL?@Johann:这是WSDL的URL。这是可行的,但里面的引用指向内部URL这似乎对我不起作用。你还有什么建议吗?Johann Blais(上图)提醒我,“公共地址”是一个子域,可能是由服务器上的某些IIS配置生成的。@stickman奇怪,因为它似乎在另一个问题上对这个家伙有效:@Johann:是的,很奇怪-看看其他线程,它似乎对除我之外的所有人都有效。事实证明,我们可能不会公开WSDL,因为需要它的客户机相对较少,我们将通过电子邮件向他们提供代理DLL。不过,谢谢你们的帮助-我已经在原始问题中粘贴了代码,所以如果我明显没有抓住要点(我远非WCF专家),请让我知道。@Johann:AFAIK userequestheadersformetadataddress在和更高版本上受支持,也许这就是你的情况?
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</behaviors>