WCF:如何在没有WSDL:import的情况下生成单个WSDL文档?

WCF:如何在没有WSDL:import的情况下生成单个WSDL文档?,wcf,web-services,wsdl,namespaces,Wcf,Web Services,Wsdl,Namespaces,我正陷入一个问题。。。 我正试图找到一种从我的WCF服务生成单个wsdl文档的方法,即不需要任何到外部文档的链接。 我曾经删除过所有xsd:import链接,但是我生成的wsdl仍然包含通过wsdl:import声明指向外部wsdl文档的链接: <wsdl:import namespace="http://myurl/mynamespace" location="http://myserver/myservice.svc?wsdl=wsdl0"/>

我正陷入一个问题。。。 我正试图找到一种从我的WCF服务生成单个wsdl文档的方法,即不需要任何到外部文档的链接。 我曾经删除过所有xsd:import链接,但是我生成的wsdl仍然包含通过wsdl:import声明指向外部wsdl文档的链接:

<wsdl:import namespace="http://myurl/mynamespace"  
             location="http://myserver/myservice.svc?wsdl=wsdl0"/>  

此文档实际上包含所有内联xsd模式,因此。。。还有一种方法可以内联这个外部wsdl文档,以便拥有一个wsdl

非常感谢你的帮助

(编辑:删除了先前关于FlatWSDL的回答,因为正如您所指出的,它是关于消除xsd:import而不是wsdl:import的。)

请看这篇博文:

“…始终为一个目标命名空间URI生成一个WSDL…”


ServiceContract、DataContract、ServiceBehavior等是否有不同的名称空间?

您还可以使用WCFExtras项目,因为它有一个扩展名来创建单个WSDL文件

WCFExtras

有用的WCF扩展的集合 包括Soap头支持、WSDL 文档等

WCF平台具有很强的可扩展性 并允许您轻松添加功能 这不是核心产品的一部分。 这个项目包含一些扩展 我需要在一个基于WCF的项目中:

  • 对WCF添加WSDL的SOAP头支持
  • 源代码XML注释的文档
  • 覆盖SOAP地址位置URL
  • 单个WSDL文件可更好地与旧的SOAP工具兼容

我的问题在于tempuri.org命名空间中的端点定义 将bindingNamespace添加到端点声明可以解决我的问题。
感谢大家的帮助:)

您现在可以在.net 4.5(beta版)中以本机方式完成此操作。有一个选项(?singleWsdl而不是?wsdl)告诉服务在单个wsdl文档中输出所有内容。更多关于新东西的信息请点击此处:

这是一个迟来的答案,但我对我们的一些WCF服务也有同样的问题。如果您使用的是.NET 4.5,就像前面的答案一样,请使用?singleWSDL,但是如果您不是针对.NET 4.5,那么我将以下内容添加到我的web.config中以解决此问题

<useRequestHeadersForMetadataAddress>
  <defaultPorts>
    <add port="80" scheme="http" />
    <add port="443" scheme="https" />
  </defaultPorts>
</useRequestHeadersForMetadataAddress>

这就是你的行为。这样我就不必扁平化WSDL,因为所有引用都指向MyURL而不是MyServer


希望这能帮助其他人解决类似问题。

除了上面Jim的答案之外,如果您使用C代码直接配置WCF ServiceHost:

using System.ServiceModel.Configuration;
在设置ServiceHost时:

UseRequestHeadersForMetadataAddressBehavior urh = new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);

我努力在网上找到这些信息,虽然很简单。希望能在类似情况下帮助他人。

您也可以使用标准服务主机工厂将其作为一种行为添加到服务中-请参阅我的链接。我使用了FlatWsdl,但这只是将xsd:import而不是wsdl:import展平。。。也许我犯了一个错误,但查看代码时,只有XSD被更改:(该链接已失效,这里是通过waybackmachine:根本原因已在上面的链接中解释,解决此问题的最简单方法是使用?singlewsdl.Copy of the dead link:我已经查看了WCFExtras,但从我的调查(可能我错了)来看,该功能“单个WSDL文件”内联XSD,但不包含外部WSDL…可能我的问题是:“…始终为一个目标命名空间URI生成一个WSDL…”正如Vizu建议的那样