Web services 尝试将WSDL导入Visual Studio 2013时出现循环引用错误
导入在Microsoft Visual Studio 2013中描述的WSDL文件时,我遇到一个错误: 警告5Web services 尝试将WSDL导入Visual Studio 2013时出现循环引用错误,web-services,visual-studio,xsd,wsdl,siri-xml,Web Services,Visual Studio,Xsd,Wsdl,Siri Xml,导入在Microsoft Visual Studio 2013中描述的WSDL文件时,我遇到一个错误: 警告5 自定义工具警告:无法导入操作GetProductionTimeline中名为FaultName的错误。不支持WSDL,错误消息部分必须引用元素。此故障消息不引用元素。如果您具有对WSDL文档的编辑访问权,则可以通过使用“element”属性引用架构元素来解决此问题。C:\path\to\TransportationDemo\TransportationDemo\Service Refe
自定义工具警告:无法导入操作GetProductionTimeline中名为FaultName的错误。不支持WSDL,错误消息部分必须引用元素。此故障消息不引用元素。如果您具有对WSDL文档的编辑访问权,则可以通过使用“element”属性引用架构元素来解决此问题。C:\path\to\TransportationDemo\TransportationDemo\Service References\servicerence\Reference.svcmap 1 当使用时,它删除了许多方法,我得到了另一个错误(在其他错误中): 警告5
自定义工具警告:无法导入wsdl:portType
详细信息:运行WSDL导入扩展时引发异常:System.ServiceModel.Description.XmlSerializerMessageCompactImporter
错误:来自targetNamespace=''的组“ServiceDeliveryBodyGroup”具有无效的定义:循环组引用。
XPath到错误源://wsdl:definitions[@targetNamespace='']/wsdl:portType[@name='SOAP-Port']C:\path\to\TransportationDemo\TransportationDemo\Service References\servicerence1\Reference.svcmap 1 有些元素定义似乎出现在多个XSD中。因此,我尝试使用
svcuti.exe
手动创建代理代码。我逐个添加了依赖项所需的文件。首先,我可以选择添加哪个文件,siri.xsd
或siri\siri_base-v1.3.xsd
,因为它们都包含ServiceRequestStructure
元素的定义
在siri.xsd
路径中,我添加了所有依赖项,并以上面提到的相同循环引用结束
在siri\siri_base-v1.3.xsd
中,我实际上可以生成代码。我可以创建一个SOAPPortClient
对象实例。我想对其调用GetStopMonitoringServiceRequest
方法。但是为了能够输入必填字段,我需要一个StopMonitoringRequestStructure
对象的实例。这在siri_stopMonitoring_service.xsd
文件中定义,不包括在用于生成此代理的xsd列表中。当我添加这个模式文件时,我还必须添加siri\u stopTimeline\u service.xsd
(对于MonitoringRefStructure
的定义),然后上面的循环依赖项错误消息再次出现
我在这里不知所措,如果有人在VisualStudio的WSDL方面有更多的经验,或者仅仅是SOAP服务(或者特别是这一个),我将非常感谢他们的帮助,以解决这个问题
请注意,SIRI在两个单独的文件中提供web服务接口,SIRI\u wsProducer.wsdl
和SIRI\u wsConsumer.wsdl
。据我所知,我对与“制作人”互动很感兴趣
这个问题是相关的——显然是由一位开发人员同事提出的,如果他能参与讨论,我将非常感激,因为他似乎找到了一个解决方案:
我对您的模式和WSDL进行了更多的研究,并找到了您的问题的答案,尽管您可能不喜欢
- 在中没有区别,因为这只适用于重新导入定义的情况
- 导入后,VisualStudio将所有XSD放在服务引用下(单击“显示隐藏文件”)。选择
,它将显示无法定位两个包含项siri.xsd
- 为了解决包含问题,我将包含URI更改为绝对URI。这解决了Visual Studio无法定位文件的问题,然后它会正确复制这些文件
- 现在重建时,它将在调试输出窗口中显示正确的验证错误。最重要的是,它抱怨重新定义。我设法通过删除对
的任何引用并简化使用它的几个地方(xml.xsd
)来解决这个问题。我做的下一件事是将所有XSD直接放在根目录下,并修复了xml:lang
和xsl:import
中的所有引用以反映这一点。许多重新定义的错误现在消失了xsl:include
- 它现在抱怨
是循环的(它以前这样做过,但我希望其他警告不要妨碍它): Microsoft.ServiceModel.targets(113,5):错误:targetNamespace=''中的组“ServiceDeliveryBodyGroup”具有无效的定义:循环组引用 这是一个棘手的问题,因为我没有设法追踪为什么它被认为是循环的,但如果它是。它被进口了两次,但这似乎不是原因,我认为这是故意的xs:group
xsd.exe
(与wsdl.exe
,svcutil
和添加服务引用所使用的代码类似)似乎已经确认了这一点
我认为你最好的办法是把这个团体变成非循环的。之后,它应该接受有效的模式并继续。导入程序抱怨wsdl:portType的事实并没有为您指明正确的方向。它抱怨这一点,因为它无法映射所有类型,这导致根本没有映射任何类型,之后wsdl:portType
也是未知的,因此出现了错误
修复
ServiceDeliveryBodyGroup
类型后,上述其他步骤很可能会过时。其他错误实际上是警告,我相信微软基本上忽略了这些重新定义,并将“正常”进行处理。结果是循环引用如下所示:
基于ServiceDeliveryStructure complexType
,基于产品响应结构
<xsd:complexContent>
<xsd:extension base="ProducerResponseStructure">
<xsd:sequence>
<xsd:group ref="ServiceDeliveryBodyGroup"/>
</xsd:sequence>
<xsd:attribute name="srsName" type="SrsNameType" />
</xsd:extension>
</xsd:complexContent>
<xsd:sequence>
<xsd:group ref="ProducerResponseEndpointGroup"/>
<xsd:group ref="ServiceDeliveryBodyGroup"/>
</xsd:sequence>
<xsd:attribute name="srsName" type="SrsNameType" />