【问题标题】:svcutil from wsdl file: Error Schema with target namespace could not be foundwsdl 文件中的 svcutil:找不到具有目标命名空间的错误架构
【发布时间】:2011-10-14 13:01:06
【问题描述】:

在我的机器上,我有一个 WSDL 文件和所有必要的架构文件。 我正在尝试使用 svcutil 从 WSDL 创建客户端代理代码。 命令:

svcutil myfile.wsdl

我在使用 svcutil 时不断收到错误,但如果这意味着什么,则在使用 soapUI 加载 wsdl 时没有问题。

我不断收到此错误:

Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Schema with target namespace 'http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0']/wsdl:portType[@name='areventservice']

这是 WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    name="areventservice"
    targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
    xmlns:tns="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
    xmlns:es="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0">



    <wsdl:types>
        <xsd:schema targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
                    xmlns:tns="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
                    xmlns:es="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0">

            <xsd:include schemaLocation="arevent-service.xsd"/>
        </xsd:schema>
    </wsdl:types>

    <wsdl:message name="SaveAREventWithShortNames">
        <wsdl:part element="es:save-arevent-with-shortnames" name="SaveAREventWithShortNames"/>
    </wsdl:message>

    <wsdl:message name="RetrieveAREventByConsumerIdentifier">
        <wsdl:part element="es:retrieve-arevent-by-consumer-agency-identifier" name="RetrieveAREventByConsumerIdentifier"/>
    </wsdl:message>

    <wsdl:message name="RetrieveAREventByConsumerAccountIdentifier">
        <wsdl:part element="es:retrieve-arevent-by-consumer-account-agency-identifier" name="RetrieveAREventByConsumerAccountIdentifier"/>
    </wsdl:message>

    <wsdl:message name="RetrieveAREventResponse">
        <wsdl:part element="es:retrieve-arevent-response" name="RetrieveAREventResponse"/>
    </wsdl:message>

    <wsdl:message name="SaveAREventResponse">
        <wsdl:part element="es:save-arevent-response" name="SaveAREventResponse"/>
    </wsdl:message>

    <wsdl:portType name="areventservice">
        <wsdl:operation name="SaveAREventWithShortNames">
            <wsdl:input message="tns:SaveAREventWithShortNames" name="SaveAREventWithShortNames"/>
            <wsdl:output message="tns:SaveAREventResponse" name="SaveAREventResponse"/>         
        </wsdl:operation>
        <wsdl:operation name="RetrieveAREventByConsumerIdentifier">
            <wsdl:input message="tns:RetrieveAREventByConsumerIdentifier" name="RetrieveAREventByConsumerIdentifier"/>
            <wsdl:output message="tns:RetrieveAREventResponse" name="RetrieveAREventResponse"/>
        </wsdl:operation>
        <wsdl:operation name="RetrieveAREventByConsumerAccountIdentifier">
            <wsdl:input message="tns:RetrieveAREventByConsumerAccountIdentifier" name="RetrieveAREventByConsumerAccountIdentifier"/>
            <wsdl:output message="tns:RetrieveAREventResponse" name="RetrieveAREventResponseByAccountIdentifier"/>
        </wsdl:operation>
    </wsdl:portType>

这里是架构文件 arevent-service.xsd(与 WSDL 位于同一目录):

<?xml version="1.0" encoding="UTF-8"?>
<!-- (C)opyright 2004-2009 by CR Software, LLC - All Rights Reserved  -->


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:as="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
    targetNamespace="http://www.crsoftwareinc.com/xml/ns/titanium/event/areventservice/v1_0"
    xmlns:common="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0"
    elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xs:import 
        schemaLocation="arevent-service-common.xsd" 
        namespace="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0"/>

    <xs:element name="save-arevent-with-shortnames" type="common:save-areventType" />

    <xs:element name="retrieve-arevent-by-consumer-agency-identifier" type="common:retrieve-by-consumer-agency-idType" />

    <xs:element name="retrieve-arevent-by-consumer-account-agency-identifier" type="common:retrieve-by-consumer-account-agency-idType" />

    <xs:element name="retrieve-arevent-response" type="as:retrieve-arevent-responseType" />

    <xs:complexType name="retrieve-arevent-responseType">
        <xs:sequence>                               
            <xs:element name="arevent-page-results" type="common:arevent-page-resultsType" 
                minOccurs="1" maxOccurs="1" >
                <xs:annotation>                      
                    <xs:documentation>
                        arevent page results type
                    </xs:documentation>
                </xs:annotation>                
            </xs:element>
        </xs:sequence>
    </xs:complexType>


    <xs:element name="save-arevent-response" type="as:save-arevent-responseType" />

    <xs:complexType name="save-arevent-responseType">
        <xs:sequence>                               
            <xs:element name="arevent" type="common:areventType"
                minOccurs="1" maxOccurs="1" >
                <xs:annotation>                      
                    <xs:documentation>
                        arevent type
                    </xs:documentation>
                </xs:annotation>                
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

目标名称空间看起来都与我匹配。 就像我说的,soapUI 加载 wsdl 没有问题。

我不知道该怎么做。

【问题讨论】:

  • 尝试在 WSDL 路径之后指定所有模式的路径。这就是您必须使用旧的 WSDL.EXE 做的事情。
  • 我有大约 40 个引用模式。我尝试了前几个,它似乎至少生成了新的错误消息。你是说有一个新的改进版本不需要指定全部 40 个!?
  • 没有。您必须指定所有这些,否则使用“添加服务参考”,它将为您完成所有工作。
  • @John Saunders - 出于某种原因,它没有向我注册“添加服务参考”将与本地文件路径一起使用。非常感谢您的帮助!

标签: wcf svcutil.exe


【解决方案1】:

要么在命令行上指定所有 WSDL 和架构文件的路径,要么使用“添加服务引用”,这将为您完成。

请注意,“添加服务引用”确实适用于本地系统上的文件 - 不仅仅是 URL 上的文件。

【讨论】:

  • 遇到了类似的问题,可以确认将 XSD 文件添加到 SvcUtil 调用解决了问题。命令行看起来像:SvcUtil /t:code WsdlFile.wsdl FirstSchemaFile.xsd SecondSchemaFile.xsd ThirdSchemaFile.xsd /l:cs
  • 显式传入所有 XSD 文件而不是使用 *.XSD 也对我有用。
  • 添加服务参考没有解决我的问题stackoverflow.com/questions/15815095/cannot-load-xml-types。知道为什么吗?
  • 我遇到了完全相同的错误。 wsdl 和所有 xsds 在同一个文件夹中。 svcutil subscriptions.wsdl *.xsd /l:c# /o:proxy.cs 我们有一个客户提供了一个包含超过 15 个 xsd 文件的 wsdl。所以这种方法对我们有用。
猜你喜欢
  • 2011-04-14
  • 2010-10-19
  • 2015-12-30
  • 2021-12-10
  • 2012-11-03
  • 2013-05-21
  • 2023-03-17
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多