2009-07-29 74 views
1

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

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

同样,如果我通过soapUI等工具连接到服务,那么指向附加“wsdl0”输出等的链接将提供真实服务器详细信息,而不是我提供的URL(从而使服务无法发现) 。

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

注意:我的开发环境在Win2003上使用IIS6,在Win2008上的实时环境是IIS7,两种环境都会出现问题。

+0

似乎是重复的http://stackoverflow.com/questions/1078894/generated-wcf-proxy-configuration-uses-servers-local-name/ – 2009-07-29 12:27:01

+0

@Partario:我已经尝试了上述主机头解决方案并没有什么区别 - 我会再试一次,虽然包含对元素的更改。 – 2009-07-29 18:41:29

回答

0

你可以做的是提供一个静态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会提供。

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

马克

+0

@marc_s:是不是这只是正常的IIS主机头问题?在没有外部名称的主机头时,它使用机器名称? – 2009-07-29 12:22:09