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

我的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

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

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

这是我的WSDL中的导入之一

是内部地址-我无法从服务器外部访问它。有没有一种方法可以设置我的服务,使这些WSDL引用指向它们的internet 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>

在服务配置中使用行为来解决问题。默认情况下,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>