我遇到了一个问题...... 我正在尝试找到一种方法从我的WCF服务生成单个wsdl文档,即没有任何外部文档的链接。 我使用FlatWsdl删除了所有xsd:import链接,我生成的wsdl仍然包含一个通过wsdl:import声明的外部wsdl文档的链接:
<wsdl:import namespace="http://myurl/mynamespace"
location="http://myserver/myservice.svc?wsdl=wsdl0"/>
这个文档实际上包含了所有内联的xsd模式,所以...有一种方法可以内联这个外部的wsdl文档,以便有一个单独的wsdl?
非常感谢任何帮助。
答案 0 :(得分:19)
您现在可以在.net 4.5(测试版)中本机执行此操作。有一个选项(?singleWsdl而不是?wsdl)用于告诉服务在单个wsdl文档中输出所有内容。有关新内容的更多信息,请访问:http://msdn.microsoft.com/en-us/library/dd456789(v=vs.110).aspx
答案 1 :(得分:13)
(编辑:关于FlatWSDL的先前答案被删除,因为正如你所指出的那样是关于消除xsd:import而不是wsdl:import。)
请看这篇博文:Control generated WSDL in WCF
“......总是为一个目标名称空间URI生成一个WSDL ......”
ServiceContract,DataContract,ServiceBehavior等有不同的命名空间吗?
答案 2 :(得分:4)
您还可以使用它具有扩展名的WCFExtras项目来创建单个WSDL文件。
<强> WCFExtras 强>
有用的WCF扩展的集合 包括Soap Header支持,WSDL 文档等等。
WCF平台非常易于扩展 并允许您轻松添加功能 这不是核心产品的一部分。 该项目包含一些扩展 我需要一个基于WCF的项目:
- WCF添加WSDL的SOAP标头支持
- 源代码XML注释中的文档
- 覆盖SOAP地址位置URL
- 单个WSDL文件,以便与旧的SOAP工具更好地兼容。
答案 3 :(得分:2)
我的问题出在端点定义中,即tempuri.org命名空间 将bindingNamespace添加到端点声明可以解决我的问题。 感谢所有人的帮助:))
答案 4 :(得分:1)
您需要添加一些额外的行为等。
请在此处查看这些文章:
http://my-tech-talk.blogspot.com/2008/07/adding-flatwsdl-to-wcf-webservice.html
http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx
实现这一目标有几种不同的方式。
马克
答案 5 :(得分:1)
这是一个迟到的答案,但我的一些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。
希望这可以帮助处理类似问题的其他人。
答案 6 :(得分:0)
除了Jim上面的回答,如果您使用C#代码直接配置WCF ServiceHost:
using System.ServiceModel.Configuration;
以及设置ServiceHost时:
UseRequestHeadersForMetadataAddressBehavior urh = new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);
我努力在网上找到这些信息,就像它一样简单。希望能帮助处于类似情况的人。