Xsd 在wsdl上使用SvcUtil.exe生成代理类-xs:group元素时出错

Xsd 在wsdl上使用SvcUtil.exe生成代理类-xs:group元素时出错,xsd,wsdl,wcf-client,svcutil.exe,Xsd,Wsdl,Wcf Client,Svcutil.exe,我试图对wsdl文件使用SvcUtil来生成代理类,但我得到了一个元素缺失错误,我认为这与模式组元素有关。有人知道svcutil是否可以处理吗?如果是这样的话,它将处理xs:group元素,这些元素具有指向另一个模式文件中的组定义的ref属性 SvcUtil.exe命令(还包括xsd文件的路径): 错误是: 错误:无法导入wsdl:portType 详细信息:运行时引发异常 运行WSDL导入扩展: System.ServiceModel.Description.XmlSerializerMess

我试图对wsdl文件使用SvcUtil来生成代理类,但我得到了一个元素缺失错误,我认为这与模式组元素有关。有人知道svcutil是否可以处理吗?如果是这样的话,它将处理xs:group元素,这些元素具有指向另一个模式文件中的组定义的ref属性

SvcUtil.exe命令(还包括xsd文件的路径):

错误是:

错误:无法导入wsdl:portType 详细信息:运行时引发异常 运行WSDL导入扩展: System.ServiceModel.Description.XmlSerializerMessageCompactImporter 错误:组 缺少InfrastructureRootElements。 XPath到错误源: //wsdl:definitions[@targetNamespace='urn:ihe:qrph:rpe:2009']/wsdl:portType[@name='ProtocolStateManager']

ProtocolStateManager.wsdl:

   <?xml version="1.0" encoding="UTF-8"?>
<definitions name="ProtocolStateManager" 
             targetNamespace="urn:ihe:qrph:rpe:2009" 
             xmlns:rpe="urn:ihe:qrph:rpe:2009"
             xmlns="http://schemas.xmlsoap.org/wsdl/" 
             xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
 <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TYPE DEFINITION - List of services participating in this BPEL process
    The default output of the BPEL designer uses strings as input and 
    output to the BPEL Process. But you can define or import any XML 
    Schema type and use them as part of the message types.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <types>
  <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ihe:qrph:rpe:2009">
   <include schemaLocation="schema\RPE.xsd"/>
  </schema>
 </types>
 <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MESSAGE TYPE DEFINITION - Definition of the message types used as 
    part of the port type defintions
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <message name="EnterPatientRequestRequestMessage">
  <part name="payload" element="rpe:EnterPatientRequest"/>
 </message>
 <message name="EnterPatientRequestResponseMessage">
  <part name="payload" element="rpe:EnterPatientRequest"/>
 </message>
 <message name="PatientScreeningVisitsScheduledRequestMessage">
  <part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
 </message>
 <message name="PatientScreeningVisitsScheduledResponseMessage">
  <part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
 </message>
 <message name="PatientScreeningVisitRecordedRequestMessage">
  <part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
 </message>
 <message name="PatientScreeningVisitRecordedResponseMessage">
  <part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
 </message>
 <message name="EnrollPatientRequestRequestMessage">
  <part name="payload" element="rpe:EnrollPatientRequest"/>
 </message>
 <message name="EnrollPatientRequestResponseMessage">
  <part name="payload" element="rpe:EnrollPatientRequest"/>
 </message>
 <message name="PatientStudyVisitsScheduledRequestMessage">
  <part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
 </message>
 <message name="PatientStudyVisitsScheduledResponseMessage">
  <part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
 </message>
 <message name="PatientStudyVisitRecordedRequestMessage">
  <part name="payload" element="rpe:PatientStudyVisitRecorded"/>
 </message>
 <message name="PatientStudyVisitRecordedResponseMessage">
  <part name="payload" element="rpe:PatientStudyVisitRecorded"/>
 </message>
  <message name="AlertProtocolStateMessage">
  <part name="payload" element="rpe:AlertProtocolState"/>
 </message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PORT TYPE DEFINITION - A port type groups a set of operations into
    a logical service unit.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <!-- portType implemented by the ProtocolStateManager BPEL process -->
 <portType name="ProtocolStateManager">
  <operation name="EnterPatientRequest">
   <input message="rpe:EnterPatientRequestRequestMessage"/>
   <output message="rpe:EnterPatientRequestResponseMessage"/>
  </operation>
  <operation name="PatientScreeningVisitsScheduled">
   <input message="rpe:PatientScreeningVisitsScheduledRequestMessage"/>
   <output message="rpe:PatientScreeningVisitsScheduledResponseMessage"/>
  </operation>
  <operation name="RecordPatientScreeningVisit">
   <input message="rpe:PatientScreeningVisitRecordedRequestMessage"/>
   <output message="rpe:PatientScreeningVisitRecordedResponseMessage"/>
  </operation>
  <operation name="EnrollPatientRequest">
   <input message="rpe:EnrollPatientRequestRequestMessage"/>
   <output message="rpe:EnrollPatientRequestResponseMessage"/>
  </operation>
  <operation name="PatientStudyVisitsScheduled">
   <input message="rpe:PatientStudyVisitsScheduledRequestMessage"/>
   <output message="rpe:PatientStudyVisitsScheduledResponseMessage"/>
  </operation>
  <operation name="RecordPatientStudyVisit">
   <input message="rpe:PatientStudyVisitRecordedRequestMessage"/>
   <output message="rpe:PatientStudyVisitRecordedResponseMessage"/>
  </operation>
 </portType>

  <portType name="ProtocolStateManagerCallback">
   <operation name="onAlertProtocolState">
    <input message="rpe:AlertProtocolStateMessage"/>
   </operation>
 </portType>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PARTNER LINK TYPE DEFINITION
    the ProtocolStateManager partnerLinkType binds the provider and
    requester portType into an asynchronous conversation.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <plnk:partnerLinkType name="ProtocolStateManager">
    <plnk:role name="ProtocolStateManagerProvider">
        <plnk:portType name="rpe:ProtocolStateManager"/>
    </plnk:role>
    <plnk:role name="ProtocolStateManagerCallbackListener">
        <plnk:portType name="rpe:ProtocolStateManagerCallback"/>
    </plnk:role>
 </plnk:partnerLinkType>
</definitions>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
        targetNamespace="urn:ihe:qrph:rpe:2009" 
        xmlns:rpe="urn:ihe:qrph:rpe:2009" 
        xmlns:v3="urn:hl7-org:v3" 
        xmlns="http://www.w3.org/2001/XMLSchema">

    <import namespace="urn:hl7-org:v3" schemaLocation="PORT_MT100001UV.xsd"/>

    <element name="RetrieveProtocolDef" type="rpe:RetrieveProtocolDefType"/>
    <element name="EnterPatientRequest" type="rpe:EnterPatientRequestType"/>
    <element name="EnrollPatientRequest" type="rpe:EnrollPatientRequestType"/>
    <element name="PatientScreeningVisitsScheduled" type="rpe:PatientScreeningVisitsScheduledType"/>
    <element name="PatientScreeningVisitRecorded" type="rpe:PatientScreeningVisitRecordedType"/>
    <element name="PatientStudyVisitsScheduled" type="rpe:PatientStudyVisitsScheduledType"/>
    <element name="PatientStudyVisitRecorded" type="rpe:PatientStudyVisitRecordedType"/>
    <element name="AmendProtocolDef" type="rpe:AmendProtocolDefType"/>
    <element name="AlertProtocolState" type="rpe:AlertProtocolStateType"/>
    <!--  need patient information and study information
            EnterPatientRequestType can also be used for the return of candidateID?-->
    <complexType name="RetrieveProtocolDefType">
        <sequence>
            <element name="query" type="string"/>
            <element name="protocolDef" type="string"/>
        </sequence>
    </complexType>
    <complexType name="EnterPatientRequestType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
    <!--  need patient for candidateID of the patient being scheduled for screening visits
            need studyID to associate the candidate with the study
            need schedule information-->
    <complexType name="PatientScreeningVisitsScheduledType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="schedule" type="rpe:ScreeningVisitScheduleType"/>
        </sequence>
    </complexType>
    <!--  need patient for candidateID of patient being recorded for screening visit
            need studyID to associate the candidate with the study
            need visit information for the screening visit being recorded-->
    <complexType name="PatientScreeningVisitRecordedType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="visit" type="rpe:ScreenVisitType"/>
        </sequence>
    </complexType>
    <!--  need patient information and study information
            EnterPatientRequestType can also be used for the return of subjectID?-->
    <complexType name="EnrollPatientRequestType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
    <!--  need patient for subjectID of the patient being scheduled for visits
            need studyID to associate the subject with the study
            need schedule information-->
    <complexType name="PatientStudyVisitsScheduledType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="schedule" type="rpe:StudyVisitScheduleType"/>
        </sequence>
    </complexType>
    <!--  need patient for subjectID of patient being recorded for visit
            need studyID to associate the subject with the study
            need visit information for the visit being recorded-->
    <complexType name="PatientStudyVisitRecordedType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="visit" type="rpe:StudyVisitType"/>
        </sequence>
    </complexType>
    <!--  patient information should NOT include emrID?
            should contain placeholder for candidateID and subjectID
            what specific demographics data is needed?
              Should this be a generic type so that an XML standard can be passed?-->
    <complexType name="PatientType">
        <sequence>
            <element name="candidateID" type="string"/>
            <element name="subjectID" type="string"/>
            <element name="name" type="string"/>
            <element name="address" type="string"/>
            <element name="dob" type="string"/>
        </sequence>
    </complexType>
    <!--  studyID to identify the study
            should studyData be a generic type to store an XML standard
    <complexType name="StudyType">
        <sequence>
            <element name="studyID" type="string"/>
            <element name="studyData" type="string"/>
        </sequence>
    </complexType>-->
    <complexType name="ScreenVisitType">
        <sequence>
            <element name="visitID" type="string"/>
            <element name="candidateID" type="string"/>
            <element name="date" type="string"/>
            <element name="screenVisitData" type="string"/>
        </sequence>
    </complexType>
    <complexType name="StudyVisitType">
        <sequence>
            <element name="visitID" type="string"/>
            <element name="subjectID" type="string"/>
            <element name="date" type="string"/>
            <element name="studyVisitData" type="string"/>
        </sequence>
    </complexType>
    <complexType name="ScreeningVisitScheduleType">
        <sequence>
            <element name="visit" type="rpe:ScreenVisitType" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    <complexType name="StudyVisitScheduleType">
        <sequence>
            <element name="visit" type="rpe:StudyVisitType" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    <complexType name="AmendProtocolDefType">
        <sequence>
            <element name="protocolDef" type="string"/>
        </sequence>
    </complexType>
    <complexType name="AlertProtocolStateType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
</schema>

RPE.xsd(ProtocolStateManager.wsdl引用):


来自端口_MT100001UV.xsd(由RPE.xsd引用)的代码片段-请注意“InfrastructureRootElements”xs:group:

  <xs:complexType name="PORT_MT100001UV.Access">
      <xs:sequence>
         <xs:group ref="InfrastructureRootElements"/>
         <xs:element name="id" type="II" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="targetSiteCode" type="CD" minOccurs="0" maxOccurs="1"/>
         <xs:choice>
            <xs:choice>
               <xs:element name="accessedPerson" type="PORT_MT100001UV.Person" nillable="true"
                           minOccurs="0"
                           maxOccurs="1"/>
               <xs:element name="accessedNonPersonLivingSubject"
                           type="PORT_MT100001UV.NonPersonLivingSubject"
                           nillable="true"
                           minOccurs="0"
                           maxOccurs="1"/>
            </xs:choice>
            <xs:element name="accessedProduct" type="PORT_MT100001UV.Product" nillable="true"
                        minOccurs="0"
                        maxOccurs="1"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="InfrastructureRootAttributes"/>
      <xs:attribute name="nullFlavor" type="NullFlavor" use="optional"/>
      <xs:attribute name="classCode" type="RoleClassAccess" use="required"/>
   </xs:complexType>

infrastructureRoot.xsd(PORT_MT100001UV.xsd引用)注意此处InfrastructureRootElements组的定义-这是上述架构中具有ref属性的同一组:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:mif="urn:hl7-org:v3/mif" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:v3="urn:hl7-org:v3"
           xmlns:ex="urn:hl7-org/v3-example"
           elementFormDefault="qualified">
   <xs:annotation xmlns="urn:hl7-org:v3">
      <xs:documentation>Source Information...</xs:documentation>
   </xs:annotation>
   <xs:include schemaLocation="voc.xsd"/>
   <xs:include schemaLocation="datatypes.xsd"/>
   <xs:group name="InfrastructureRootElements">
      <xs:sequence>
         <xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="typeId" type="II" minOccurs="0" maxOccurs="1"/>
         <xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:group>
   <xs:attributeGroup name="InfrastructureRootAttributes"/>
</xs:schema>

源信息。。。

我不确定SvcUtil,但对于XSD.exe和WSDL.exe,您必须指定.XSD文件使用的所有文件,因为它们无法识别元素。也许我的帖子也会对你有所帮助:

我从msdn论坛上的帖子中找到。它让我克服了我的错误,并且看起来在功能方面提供了更多。

我确信您只需要提供所有架构文件。你有这个工作吗?不幸的是,我的注意力转移到了其他事情上。上一次我在做这件事时,我检查了所有的模式引用——我想有30多个xsd文件都有疯狂的名字。。ug-如果我回到它,我会发布解决方案。是的,我知道这个问题,因为我在过去遇到并克服了它-不幸的是,它似乎没有帮助这里。Svcutil.exe是与wsdl.exe等效的WCF。感谢您的博客链接-找到其他人开发IHE配置文件(XDS、XCA等)总是很好-也许明年我会在connectathon上见到您?非常好的工具。帮助解决了这个问题。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:mif="urn:hl7-org:v3/mif" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:v3="urn:hl7-org:v3"
           xmlns:ex="urn:hl7-org/v3-example"
           elementFormDefault="qualified">
   <xs:annotation xmlns="urn:hl7-org:v3">
      <xs:documentation>Source Information...</xs:documentation>
   </xs:annotation>
   <xs:include schemaLocation="voc.xsd"/>
   <xs:include schemaLocation="datatypes.xsd"/>
   <xs:group name="InfrastructureRootElements">
      <xs:sequence>
         <xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="typeId" type="II" minOccurs="0" maxOccurs="1"/>
         <xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:group>
   <xs:attributeGroup name="InfrastructureRootAttributes"/>
</xs:schema>