在远程服务器上公开WSDL

时间:2009-12-10 10:26:40

标签: .net wcf wsdl

是否有一种聪明的方法可以在另一台服务器上自动从一台IIS服务器上托管的WCF服务公开WSDL?

由于

3 个答案:

答案 0 :(得分:0)

WSDL是从WCF基础结构自动生成的。因此,如果您不在此服务器上部署Web服务,则无法公开WSDL。您当然可以手动复制生成的XML文件,但如果原始Web服务发生更改,则需要在其他服务器上更新它们。

答案 1 :(得分:0)

好吧,如果你想让其他服务器的WSDL准确无误,而你只是传递所有请求,你可能只需要使用新的正确端点更新WSDL的wsdl:service元素(可能通过用外部域替换内部域。)

您可以手动执行此操作,只需在更改后端代码时更新面向公众的WSDL,或者通过使用XmlDocument解析它并在呈现输出之前更新相关节点来即时更新。我不相信会有任何事情让你自动化。

答案 2 :(得分:0)

我不知道你是否找到了答案,但是

WCF服务具有端点,由其web.config定义。 其中一个被称为

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

并且是为IMetadataExchange合约定义的。 现在这个人必须在同一个文件中定义一个行为

<behavior name="OverlayService.Service1Behavior">
   <serviceMetadata httpGetEnabled="true"/>
   <serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>

Service1Behavior是整个WCF服务的行为,它启用httpGet 在ServiceMetadata上运行。

mex是元数据服务地址的默认名称。

把你想要的任何端口放在这里,但有一个建议,去8000-9000及以后。

<Host>
<add baseAddress="http://localhost:8080" /> 
</Host>

位于web.config中,它是您定义的标记的直接子代, (它之间和之间进一步发展)

WCF服务最好位于虚拟IIS路径中:http://localhost/servicename.svc 顺便说一句,IIS中没有“mex”文件夹,它在程序集和IMetadata中不需要系统定义,它是.net定义的一部分,不需要为它提供文件 这是一个众所周知的名字。