WSWS4117E:尝试将具有 SOAP 1.2 协议协议的 SOAPEnvelope 添加到具有 SOAP 1.1 协

本文关键字:协议 SOAP SOAPEnvelope 添加 WSWS4117E | 更新日期: 2023-09-27 18:35:03

这就是我们传出的肥皂在代码隐藏中的样子。它给了我一个错误HTTP 500。我无法控制该服务。只是客户端使用此 Web 服务https://mn-its.dhs.state.mn.us/MnHieEligAdapterWebServiceImpl/spring-ws/EligibilityAdapterMITA

错误

ns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body><soapenv:Fault>
       <faultcode>soapenv:Server</faultcode><faultstring>WSWS4117E: An attempt was made to add an SOAPEnvelope with a protocol of SOAP 1.2 Protocol to a
         SOAPMessage with a protocol of SOAP 1.1 Protocol.</faultstring>
    </soapenv:Fault>
         </soapenv:Body>
         </soapenv:Envelope>

我知道这不是在 wcf 中做肥皂的最佳方法。我的意思是喜欢将其附加到字符串生成器中,但请求涉及发送cookie,在Http标头中信任。这就是我们这样做的原因。

C# 代码

StringBuilder SoapEnvelope = new StringBuilder();
                SoapEnvelope.Append("<soap:Envelope ");
                SoapEnvelope.Append("xmlns:soap=");
                SoapEnvelope.Append("'"http://www.w3.org/2003/05/soap-envelope'"");
                SoapEnvelope.Append(" xmlns:cor=");
                SoapEnvelope.Append("'"http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd'">");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<soap:Header/>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<soap:Body>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<cor:COREEnvelopeRealTimeRequest>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<PayloadType>X12_270_005010X279A1</PayloadType>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<ProcessingMode>RealTime</ProcessingMode>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<PayloadID>" + DateTime.Now.Ticks.ToString().Substring(10) + "</PayloadID>");
                SoapEnvelope.Append(Environment.NewLine);
                string Tdate = DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
                SoapEnvelope.Append("<TimeStamp>" + Tdate + "</TimeStamp>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<SenderID>" + PayerDetails.SenderID + "</SenderID>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<ReceiverID>" + PayerDetails.ReceiverID + "</ReceiverID>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("<CORERuleVersion>2.2.0</CORERuleVersion>");
                SoapEnvelope.Append(Environment.NewLine);
                Query270 = Generate270(production, UseAlternateProvider);
                SoapEnvelope.Append("<Payload>");
                SoapEnvelope.Append(Query270);
                SoapEnvelope.Append("</Payload>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("</cor:COREEnvelopeRealTimeRequest>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("</soap:Body>");
                SoapEnvelope.Append(Environment.NewLine);
                SoapEnvelope.Append("</soap:Envelope>");

                cookie.Add(new Uri("https://mn-its.dhs.state.mn.us"), new System.Net.Cookie("OBBasicAuth", "fromDialog"));
                cookie.Add(new Uri("https://mn-its.dhs.state.mn.us"), new System.Net.Cookie("ObSSOCookie", "loggedoutcontinue"));
                byte[] SoapEnvelopeBytes = null;
                SoapEnvelopeBytes = Encoding.UTF8.GetBytes(SoapEnvelope.ToString());
                System.Net.WebRequest webRequest = System.Net.WebRequest.Create(PayerDetails.TestURL);
                System.Net.HttpWebRequest httpRequest = (System.Net.HttpWebRequest)webRequest;
                httpRequest.CookieContainer = cookie;
                httpRequest.Method = "POST";
                httpRequest.UserAgent = "Mozilla/5.0";
                httpRequest.ContentType = "text/xml;charset=UTF-8";
               httpRequest.Headers.Add("SOAPAction", "EligXsdRealTimeTransaction");
                httpRequest.Credentials = new System.Net.NetworkCredential(PayerDetails.UserID, PayerDetails.Password);
                httpRequest.ContentLength = SoapEnvelopeBytes.Length;
                requestStream = httpRequest.GetRequestStream();
                requestStream.Write(SoapEnvelopeBytes, 0, SoapEnvelopeBytes.Length);
                requestStream.Close();
                using (HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse())
                {
                    StreamReader readStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                    Response271 = readStream.ReadToEnd();
                }

WSWS4117E:尝试将具有 SOAP 1.2 协议协议的 SOAPEnvelope 添加到具有 SOAP 1.1 协

确定是要发送 SOAP1.1 还是 SOAP1.2 消息。

对于 SOAP1.1,更改以下内容:

SoapEnvelope.Append("'"http://www.w3.org/2003/05/soap-envelope'"");

对此:

SoapEnvelope.Append("'"http://schemas.xmlsoap.org/soap/envelope/'"");

对于 SOAP1.2,更改以下内容:

httpRequest.ContentType = "text/xml;charset=UTF-8";
httpRequest.Headers.Add("SOAPAction", "EligXsdRealTimeTransaction");

对此:

httpRequest.ContentType = "application/soap+xml; charset=utf-8;action=EligXsdRealTimeTransaction";