【发布时间】:2017-12-31 08:57:04
【问题描述】:
我对 SOAP 请求和响应有点陌生。我正在处理分配给我的项目,我们的合作伙伴向我们提供了他们的 WSDL 文件。在请求中,他们提到了一个接受多个值的属性。
对于要传递的值,他们为我们提供了“*.xsd”文件。现在我不知道如何传递请求以及如何使用 C#.Net 中提供的 *.xsd 文件在属性中传递多个值。我该如何解决这个问题?
以下是通过 SoapUI 生成的soap请求示例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cre="http://creation.soapws.progressoft.com/">
<soapenv:Header>
<cre:paymentOperation>?</cre:paymentOperation>
<cre:requestTimeStamp>?</cre:requestTimeStamp>
<cre:securityToken>?</cre:securityToken>
<cre:username>?</cre:username>
</soapenv:Header>
<soapenv:Body>
<cre:createPayment>
<!--Optional:-->
<remitterBankBIC>?</remitterBankBIC>
<!--Optional:-->
<requestMsg>?</requestMsg>
</cre:createPayment>
</soapenv:Body>
</soapenv:Envelope>
注意:在上面的示例中,我必须传递多个值的属性。
<requestMsg>?</requestMsg>
以下是 xsd 示例:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://opay.progressoft.com/PaymentCreationSchema"
xmlns:tns="http://opay.progressoft.com/PaymentCreationSchema" elementFormDefault="qualified">
<element name="file" type="tns:paymentItem"/>
<complexType name="PaymentRequest">
<sequence>
<element minOccurs="1" maxOccurs='1' name="recordType" type="tns:BodyRecordType"/>
<element minOccurs="1" maxOccurs='1' name="transactionReference" type="tns:Max20Text"/>
<element minOccurs="1" maxOccurs='1' name="transactionDate" type="date"/>
<element minOccurs="0" maxOccurs='1' name="senderCurrency" type="tns:CurrencyCode"/>
<element minOccurs="1" maxOccurs='1' name="beneficiaryCurrency" type="tns:CurrencyCode"/>
<element minOccurs="1" maxOccurs='1' name="transferAmount" type="tns:PaymentAmount"/>
<element minOccurs="1" maxOccurs='1' name="remitterFirstName" type="tns:Max30Text"/>
<element minOccurs="1" maxOccurs='1' name="remitterMiddleName" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterLastName1" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterLastName2" type="tns:Max40Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterNationality" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterMobileNo" type="tns:Mobile"/>
<element minOccurs="1" maxOccurs='1' name="remitterAddress1" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterAddress2" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="remitterAddress3" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="payerOtherInfo1" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="payerOtherInfo2" type="tns:Max50Text"/>
<element minOccurs="1" maxOccurs='1' name="beneficiaryFirstName" type="tns:Max30Text"/>
<element minOccurs="1" maxOccurs='1' name="beneficiaryMiddleName" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryLastName1" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryLastName2" type="tns:Max30Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryNationality" type="tns:Max40Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryMobile" type="tns:Mobile"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryEmailID" type="tns:Max60Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryAddress1" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryAddress2" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryAddress3" type="tns:Max100Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryBankBICCode" type="tns:Max35Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryIBAN" type="tns:Max35Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryBranchName" type="tns:Max35Text"/>
<element minOccurs="0" maxOccurs='1' name="beneficiaryID" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="benOtherInfo1" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="benOtherInfo2" type="tns:Max50Text"/>
<element minOccurs="1" maxOccurs='1' name="transferPurpose" type="tns:Max105Text"/>
<element minOccurs="1" maxOccurs='1' name="chargeType" type="tns:ChargeType"/>
<element minOccurs="0" maxOccurs='1' name="optionalField1" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField2" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField3" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField4" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField5" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField6" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField7" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField8" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField9" type="tns:Max50Text"/>
<element minOccurs="0" maxOccurs='1' name="optionalField10" type="tns:Max50Text"/>
</sequence>
</complexType>
<complexType name="paymentItem">
<sequence>
<element type="tns:PaymentRequest" name="payment"/>
</sequence>
</complexType>
<complexType name="PaymentResponse">
<sequence>
<element minOccurs="1" maxOccurs='1' name="recordType" type="tns:BodyRecordType"/>
<element minOccurs="1" maxOccurs="1" name="transactionReference" type="tns:Max20Text" />
<element minOccurs="0" maxOccurs="1" name="resolution" type="tns:Max10Text" /> <!-- add enum for resolution -->
<element minOccurs="0" maxOccurs="1" name="rejectionReasonCode" type="tns:Max03Text" />
<element minOccurs="0" maxOccurs="1" name="rejectionReasonDescription" type="tns:Max70Text" />
<element minOccurs="0" maxOccurs="1" name="custAcctName" type="tns:Max80Text" />
<element minOccurs="0" maxOccurs="1" name="corrBankCharge" type="tns:PaymentAmount" />
<element minOccurs="0" maxOccurs="1" name="corrSwiftCharge" type="tns:PaymentAmount" />
<element minOccurs="0" maxOccurs="1" name="cbjCharge" type="tns:PaymentAmount" />
<element minOccurs="0" maxOccurs="1" name="netAmt" type="tns:PaymentAmount" />
<element minOccurs="0" maxOccurs="1" name="netAmtCrncy" type="tns:CurrencyCode" />
<element minOccurs="0" maxOccurs="1" name="rateCode" type="tns:Max08Text" />
<element minOccurs="0" maxOccurs="1" name="rate" type="tns:Rate" />
<element minOccurs="0" maxOccurs="1" name="originalAmtJOD" type="tns:PaymentAmount" />
<element minOccurs="0" maxOccurs="1" name="tranId" type="tns:Max09Text" />
<element minOccurs="0" maxOccurs="1" name="tranDate" type="date" />
</sequence>
</complexType>
<simpleType name="Mobile">
<restriction base="string">
<pattern value="[00|+][0-9]{28}"/>
</restriction>
</simpleType>
<simpleType name="PaymentAmount">
<restriction base="decimal">
<minInclusive value="0.00"/>
<fractionDigits value="3"/>
<totalDigits value="17"/>
<maxInclusive value="99999999999999.99"/>
<pattern value="[0-9]{0,14}([\.]([0-9]{0,3})){0,1}"/>
</restriction>
</simpleType>
<simpleType name="Rate">
<restriction base="decimal">
<minInclusive value="0.00"/>
<fractionDigits value="7"/>
<totalDigits value="10"/>
<maxInclusive value="999.9999999"/>
<pattern value="[0-9]{0,3}([\.]([0-9]{0,7})){0,1}"/>
</restriction>
</simpleType>
<simpleType name="ChargeType">
<restriction base="string">
<enumeration value="BEN"/>
<enumeration value="OUR"/>
<enumeration value="SHA"/>
</restriction>
</simpleType>
<simpleType name="BodyRecordType">
<restriction base="string">
<pattern value="[D]{1,1}"/>
</restriction>
</simpleType>
<simpleType name="CurrencyCode">
<restriction base="string">
<pattern value="[A-Z]{3,3}"/>
</restriction>
</simpleType>
<simpleType name="Max03Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="3"/>
</restriction>
</simpleType>
<simpleType name="Max08Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="8"/>
</restriction>
</simpleType>
<simpleType name="Max09Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="9"/>
</restriction>
</simpleType>
<simpleType name="Max10Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="10"/>
</restriction>
</simpleType>
<simpleType name="Max105Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="105"/>
</restriction>
</simpleType>
<simpleType name="Max100Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="100"/>
</restriction>
</simpleType>
<simpleType name="Max20Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="20"/>
</restriction>
</simpleType>
<simpleType name="Max35Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="35"/>
</restriction>
</simpleType>
<simpleType name="Max40Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="40"/>
</restriction>
</simpleType>
<simpleType name="Max30Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="30"/>
</restriction>
</simpleType>
<simpleType name="Max50Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="50"/>
</restriction>
</simpleType>
<simpleType name="Max70Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="70"/>
</restriction>
</simpleType>
<simpleType name="Max60Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="70"/>
</restriction>
</simpleType>
<simpleType name="Max80Text">
<restriction base="string">
<minLength value="0"/>
<maxLength value="80"/>
</restriction>
</simpleType>
</schema>
【问题讨论】:
-
一般来说,如果你可以传递多个值,Soap UI 会生成类似
<requestMsg><!-Optional:--><string>?</string</requestMsg>。由于它没有像这样生成它,我怀疑它可以采用多个值 -
n.b.那不是一个属性。这称为元素。