【问题标题】:DNS resolution for WCF service discoveryWCF 服务发现的 DNS 解析
【发布时间】:2009-07-29 11:50:45
【问题描述】:

我有一个 WCF 服务,它托管在公共 Web 服务器上的 IIS 中,并且需要可发现。

问题是,当我浏览 http://myserver.mydomain/myfolder/myService.svc 时,显示的页面显示的是实际机器名称,而不是我提供的 URL,例如http://myRealServer.myRealDomain/myFolder/myService.svc?wsdl 作为查看 WSDL 的链接。

类似地,如果我通过诸如soapUI 之类的工具连接到服务,则会提供指向附加“wsdl0”输出等的链接,其中包含真实的服务器详细信息,而不是我提供的URL(从而使服务无法发现)。

我的问题:如何更改此 URL 以正确显示?

注意:我的开发环境是Win2003上的IIS6,直播环境是Win2008上的IIS7,两个环境都出现问题。

【问题讨论】:

  • @Partario:我已经尝试了上面的主机头解决方案,它没有任何区别 - 我会再试一次,尽管包括对 元素的更改。

标签: .net asp.net wcf web-services iis


【解决方案1】:

不确定 IIS7(尽管我确信它一定是可能的),但使用 IIS6,您可以为网站设置主机头。将此设置为“myserver.mydomain”可以解决问题。见Generated WCF proxy configuration uses server's local name

【讨论】:

  • @Partario:我尝试向站点添加主机标头,但它继续显示实际的机器名称,而不是提供的主机标头值。不过还是谢谢。
【解决方案2】:

您可以做的是提供一个静态 WSDL,您可以根据自己的喜好对其进行调整和修改,然后再使其可用。

在这种情况下,静态 WSDL 是“按原样”提供的,而不是查询实际运行的服务以“即时”创建 WSDL。这也可以提高性能。

为此,您需要像这样指定 WSDL 文件的名称和位置:

<system.serviceModel>
   <behaviors>
      <serviceBehaviors>
        <behavior name="StaticWsdl">
          <serviceMetadata httpGetEnabled="true" 
               externalMetadataLocation="http://localhost:8000/YourService/YourWSDL.wsdl"/>
        </behavior>
      </serviceBehaviors>
   </behaviors>

现在,每当请求 WSDL 或元数据时,都会提供此静态 WSDL。

这还允许您创建一个包含所有必要信息的单个 WSDL,包括正在传递的数据的 XML 模式。不再需要导入或引用外部 WSDL 或 XSD 片段。

马克

【讨论】:

  • @marc_s:这不只是正常的 IIS 主机头问题吗?在外部名称没有主机头的情况下,它使用机器名称?
  • @John:不确定 - 我不熟悉那个特定问题(因为我自己从未在 IIS 中托管)
  • @marc_s & @John: 好像不是主机头问题;我已经尝试添加它,它没有任何区别。
  • @marc_s:我会记住这个选项,但如果可以的话,我更愿意坚持动态生成 wsdl。
  • @Martin:当然 - 只是要记住的另一个选择 - 以防万一:-)
猜你喜欢
  • 2023-03-06
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多