如何为 SAOP 信封消息 C# 实现 SOAP 接收器



如何为 SAOP 信封消息 C# 实现 SOAP 接收器我正在将我的应用程序与旧系统集成,旧系统应该响应我的系统作为回调响应。我的 Web 服务应收到此 SOAP 消息

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
   <soapenv:Header> 
      <ns1:NotifySOAPHeader xmlns:ns1="http://www.huawei.com.cn/schema/common/v2_1"> 
         <ns1:traceUniqueID>504021505821207281129180006002</ns1:traceUniqueID> 
      </ns1:NotifySOAPHeader> 
   </soapenv:Header> 
   <soapenv:Body> 
      <ns2:processRequest xmlns:ns2="http://b2b.mobilemoney.mtn.zm_v1.0/"> 
         <serviceId>101</serviceId> 
         <parameter> 
            <name>ProcessingNumber</name> 
            <value>12121212</value> 
         </parameter> 
         <parameter> 
            <name>senderID</name> 
            <value>MOM</value> 
         </parameter> 
         <parameter> 
            <name>AcctRef</name> 
            <value>112233</value> 
         </parameter> 
         <parameter> 
            <name>RequestAmount</name> 
            <value>1212</value> 
         </parameter> 
         <parameter> 
            <name>paymentRef</name> 
            <value>12121</value> 
         </parameter> 
         <parameter> 
            <name>ThirdPartyTransactionID</name> 
            <value>12112</value> 
         </parameter> 
         <parameter> 
            <name>MOMAcctNum</name> 
            <value>121212</value> 
         </parameter> 
         <parameter> 
            <name>CustName</name> 
            <value>121212</value> 
         </parameter> 
         <parameter> 
            <name>TXNType</name> 
            <value>12121</value> 
         </parameter> 
         <parameter> 
            <name>StatusCode</name> 
            <value>12121</value> 
         </parameter> 
         <parameter> 
            <name>OpCoID</name> 
            <value>0</value> 
         </parameter> 
      </ns2:processRequest> 
   </soapenv:Body> 
</soapenv:Envelope>

如何构建接受此 SOAP 消息的 Web 服务

您可以尝试以下操作

  • 将回调声明为后 http 方法
  • 获取请求的正文并将其反序列化为 POO

在控制器中

  [HttpPost]
        Public async Task<IHttpActionResult> ProcessRequest(string saopRequest)
        {   //here just a bit of string manipulation 
           var index = soapRequest.IndexOf("<ns2:processRequest");
                var lasindex = soapRequest.IndexOf("</ns2:processRequest>");
                var length = lasindex - index +"</ns2:processRequest>".Length  ;           
                var body = soapRequest.Substring(index,length);
                var request = body.Replace("ns2:", string.Empty).Replace("xmlns:ns2="http://b2b.mobilemoney.mtn.zm_v1.0/"",string.Empty);
                XDocument xResult = XDocument.Parse(request);

                XmlSerializer deserializer = new XmlSerializer(typeof(ProcessRequest), new XmlRootAttribute("processRequest"));
                if (xResult.Root != null)
                {
                    var finalRequest= (ProcessRequest)deserializer.Deserialize(xResult.Root.CreateReader());
                    //do what you  want here 
                }                
        }

        [XmlRoot(ElementName="parameter")]
        public class Parameter {
            [XmlElement(ElementName="name")]
            public string Name { get; set; }
            [XmlElement(ElementName="value")]
            public string Value { get; set; }
        }
        [XmlRoot(ElementName="processRequest")]
        public class ProcessRequest {
            [XmlElement(ElementName="serviceId")]
            public string ServiceId { get; set; }
            [XmlElement(ElementName="parameter")]
            public List<Parameter> Parameter { get; set; }      
        }
}

最新更新