Проблема с генератором кода клиента веб-службы Visual Studio - PullRequest
0 голосов
/ 16 мая 2019

Есть 1 WSDL и несколько XSD-файлов.Как только я пытаюсь отправить запрос с помощью этого wsdl с SOAPUI, я могу успешно отправить запрос и ответ.

WSDL:

<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="FIGetAcctsInfoCallBack" targetNamespace="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfoCallBack/" xmlns:gs-ai="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo" xmlns:head="http://www.sama.bea.sa/common/Header" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wair="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfoCallBack/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xsd:schema targetNamespace="http://www.sama.bea.sa/inquiry/FIGetAcctsInfoCallBack/">
       <xsd:import namespace="http://www.sama.bea.sa/common/Header" schemaLocation="../../common/Header.xsd"/>
      <xsd:import namespace="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo" schemaLocation="../services/FIGetAcctsInfo.xsd"/>
    </xsd:schema>
    </wsdl:types>
    <wsdl:message name="FIGetAcctsInfoCallBackRq">
        <wsdl:part element="gs-ai:FIGetAcctsInfoCallBackRq" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="FIGetAcctsInfoCallBackRs">
        <wsdl:part element="gs-ai:FIGetAcctsInfoCallBackRs" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="RqHdr">
        <wsdl:part element="head:MsgHdrRq" name="header"/>
    </wsdl:message>
    <wsdl:message name="RsHdr">
        <wsdl:part element="head:MsgHdrRs" name="header"/>
    </wsdl:message>
    <wsdl:portType name="FIGetAcctsInfoCallBack">
        <wsdl:operation name="FIGetAcctsInfoCallBack">
            <wsdl:input message="wair:FIGetAcctsInfoCallBackRq"/>
            <wsdl:output message="wair:FIGetAcctsInfoCallBackRs"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="FIGetAcctsInfoCallBackSOAP" type="wair:FIGetAcctsInfoCallBack">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="FIGetAcctsInfoCallBack">
            <soap:operation soapAction="http://www.sama.bea.sa/inquiry/FIGetAcctsInfoCallBack/FIGetAcctsInfoCallBack"/>
            <wsdl:input>
                <soap:body use="literal"/>
                <soap:header message="wair:RqHdr" part="header" use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
                <soap:header message="wair:RsHdr" part="header" use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="FIGetAcctsInfoCallBack">
        <wsdl:port binding="wair:FIGetAcctsInfoCallBackSOAP" name="FIGetAcctsInfoCallBackSOAP">
            <soap:address location="http://www.sama.bea.sa/"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo"
    xmlns:gi-lib="http://www.sama.bea.sa/inquiry/services/GeneralInquiryLib"
    xmlns:ai="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo"
    xmlns:base="http://www.sama.bea.sa/common/BaseLib">
    <xsd:import namespace="http://www.sama.bea.sa/common/BaseLib"
        schemaLocation="../../common/BaseLib.xsd" />
    <xsd:import
        namespace="http://www.sama.bea.sa/inquiry/services/GeneralInquiryLib"
        schemaLocation="GeneralInquiryLib.xsd" />
    <xsd:element name="FIGetAcctsInfoRq" type="ai:T_FIGetAcctsInfoRq">
    </xsd:element>
    <xsd:element name="FIGetAcctsInfoRs" type="ai:T_FIGetAcctsInfoRs">
    </xsd:element>
    <xsd:element name="FIGetAcctsInfoCallBackRq" type="ai:T_FIGetAcctsInfoCallBackRq">
    </xsd:element>
    <xsd:element name="FIGetAcctsInfoCallBackRs" type="ai:T_FIGetAcctsInfoCallBackRs">
    </xsd:element>
    <xsd:complexType name="T_FIGetAcctsInfoRq">
        <xsd:sequence>
            <xsd:element name="Rqstr" type="base:T_Rqstr" maxOccurs="1" minOccurs="1" ></xsd:element>
            <xsd:element name="InvPrty" type="base:T_InvPrty" maxOccurs="1" minOccurs="0"></xsd:element>
            <xsd:element name="ThrdPrty" type="base:T_ThrdPrty" maxOccurs="1" minOccurs="0"></xsd:element>
            <xsd:element name="AccQry" type="gi-lib:T_AccQry" maxOccurs="1" minOccurs="0"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="T_FIGetAcctsInfoRs">
    </xsd:complexType>
    <xsd:complexType name="T_FIGetAcctsInfoCallBackRq">
        <xsd:sequence>
            <xsd:element  name="AcctsList" type="gi-lib:T_AcctsList" maxOccurs="1" minOccurs="0"></xsd:element>
            <xsd:element name="ShrsList" type="base:T_ShrsList" maxOccurs="1" minOccurs="0"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="T_FIGetAcctsInfoCallBackRs">
    </xsd:complexType>
</xsd:schema>

Ниже запрос создан SOAPUI.(Успешный случай)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:head="http://www.sama.bea.sa/common/Header" 
xmlns:bas="http://www.sama.bea.sa/common/BaseLib" 
xmlns:fig="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo" 
xmlns:gen="http://www.sama.bea.sa/inquiry/services/GeneralInquiryLib">
   <soapenv:Header>
      <head:MsgHdrRq>
         <head:PID>90084</head:PID>
         <head:MsgDtTm>2019-03-25T10:02:26</head:MsgDtTm>
         <head:ChID>B2B</head:ChID>
         <head:MsgUID>ACCINFO_20190415_636909521492188253</head:MsgUID>
         <head:SRN>1800010204898</head:SRN>
         <head:Cnfd>1</head:Cnfd>
         <head:Mod>0</head:Mod>
         <head:CRN>1800010204898-S27614262382881570612-01</head:CRN>
         <head:Clsf>R1</head:Clsf>
         <head:pHash>kjhvsd</head:pHash>
         <head:Status>S9000001</head:Status>
      </head:MsgHdrRq>
   </soapenv:Header>
   <soapenv:Body>
      <fig:FIGetAcctsInfoCallBackRq>
      </fig:FIGetAcctsInfoCallBackRq>
   </soapenv:Body>
</soapenv:Envelope>

Я просто хочу использовать тот же wsdl в своем приложении C # для вызова веб-службы.Я использовал опцию «Добавить ссылку на сервис» и показал путь wsdl, сервис успешно добавлен.После этого я получил ошибку с тем же параметром.Я исследовал проблему, используя IClientMessageInspector , и я мог видеть запрос, подготовленный Visual Studio.Ниже приведен запрос, подготовленный Visual Studio 2017

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.sama.bea.sa/inquiry/FIGetAcctsInfoCallBack/FIGetAcctsInfoCallBack</Action>
    <h:MsgHdrRq xmlns="http://www.sama.bea.sa/common/Header" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://www.sama.bea.sa/common/Header">
      <PID>90010</PID>
      <MsgDtTm>2019-05-16T11:24:06</MsgDtTm>
      <ChID>B2B</ChID>
      <MsgUID>1_20190516_636936026996740956</MsgUID>
      <SRN>1900010002766</SRN>
      <Cnfd>1</Cnfd>
      <Mod>0</Mod>
      <CRN>1900010002766-S36085627909222179147</CRN>
      <Clsf>R1</Clsf>
      <IPAdrs>100.100.185.100</IPAdrs>
      <Status>S9000001</Status>
    </h:MsgHdrRq>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FIGetAcctsInfoCallBackRq xmlns="http://www.sama.bea.sa/inquiry/services/FIGetAcctsInfo" />
  </s:Body>
</s:Envelope>

. Вы можете увидеть различия, если сравнить 2 из них, подготовленные SOAPUI и Visual Studio.-Неправильное пространство имен (у тега MsgHdrRq не должно быть атрибута пространства имен)
-Отсутствуют некоторые префиксы (<** head: ** PID ... <br>-Tevelop конверт должен иметь атрибуты пространства имен, как в приведенном ниже коде.

Я получаю сообщение об ошибке из-за этих различий. Есть ли у вас какие-либо решения для создания такого же запроса, как в SOAPUI?

...