我在一个 .NET 前端与 Java 后端通信的项目中。我们使用 wdsl's + xsd's 来描述前后端的接口。我在 .NET 4.0 的前端。我们以前用 xsd.exe & wsdl.exe 为接口生成代码,但现在我们想切换到 WCF,所以我正在尝试使用 svcutil.exe。但是,我不断收到错误。我已将其追踪到使用的<import>
语句,因此我尝试了 w3 站点中的示例:
W3.org 站点导入示例
我已将这 3 个示例文件保存为 StockQuoteService.wsdl、StockQuote.wsdl 和 StockQuote.xsd,并将位置属性设置为这些文件。我已经修复了一个错误(在 StockQuoteService.wdsl 中,绑定应该是 StockQuoteSoapBinding,而不是 StockQuoteBinding)。然后我像这样运行 svcutil:
svcutil StockQuoteService.wsdl *.xsd /serializer:XmlSerializer
并且 presto,与我们的 xsd/wsdl 完全相同的错误:
错误:无法导入 wsdl:binding 详细信息:找不到http://example.com/stockquote/definitions:StockQuotePortType的定义。缺少命名空间http://example.com/stockquote/definitions的服务描述。参数名称:名称 XPath 到错误源://wsdl:definitions[@targetNamespace=' http://example.com/stockquote/service ']/wsdl:binding[@name='StockQuoteSoapBinding']
StockQuotePortType 在 StockQuote.wsdl 中,它包含在 StockQuoteService.wsdl 中,但似乎 scvutil 找不到它。对于我们自己的文件,我们也有类似的情况。
我是 WCF 的新手,谁能解释这里发生了什么?