C# WS4117E:尝试将协议为SOAP1.2的SOAPEnvelope添加到协议为SOAP1.1的SOAPMessage

C# WS4117E:尝试将协议为SOAP1.2的SOAPEnvelope添加到协议为SOAP1.1的SOAPMessage,c#,wcf,soap,C#,Wcf,Soap,这就是我们即将推出的soap在代码隐藏中的外观。。 它给了我一个错误HTTP 500。。我无法控制这项服务。只有客户端才能使用此Web服务 错误 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"> <soapen

这就是我们即将推出的soap在代码隐藏中的外观。。 它给了我一个错误HTTP 500。。我无法控制这项服务。只有客户端才能使用此Web服务

错误
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>
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:ServerWS4117E:试图将协议为SOAP 1.2的SOAPEnvelope添加到
具有SOAP 1.1协议协议的SOAPMessage。
我知道这不是在wcf中执行soap的最佳方法。。我的意思是,就像在stringbuilder中附加它一样,但请求涉及在Http头中发送cookie和Credentail。这就是我们这样做的原因

C#代码

StringBuilder SoapEnvelope=新建StringBuilder();
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.Append(“X12_270_005010X279A1”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.Append(“实时”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.Append(“+DateTime.Now.Ticks.ToString().Substring(10)+”);
SoapEnvelope.Append(Environment.NewLine);
字符串Tdate=DateTime.Now.ToString(“yyyy'-'MM'-'dd'T'HH':'MM':'ss”);
附加(“+Tdate+”);
SoapEnvelope.Append(Environment.NewLine);
附加(“+PayerDetails.SenderID+”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.Append(“+PayerDetails.ReceiverID+”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.Append(“2.2.0”);
SoapEnvelope.Append(Environment.NewLine);
Query270=Generate270(生产、使用替代供应商);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(查询270);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
SoapEnvelope.Append(Environment.NewLine);
SoapEnvelope.追加(“”);
添加(新的Uri(“https://mn-its.dhs.state.mn.us新系统.Net.Cookie(“OBBasicAuth”、“fromDialog”);
添加(新的Uri(“https://mn-its.dhs.state.mn.us新系统.Net.Cookie(“ObSSOCookie”、“loggedoutcontinue”);
字节[]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”;
Add(“SOAPAction”、“EligXsdRealTimeTransaction”);
httpRequest.Credentials=new System.Net.NetworkCredential(PayerDetails.UserID、PayerDetails.Password);
httpRequest.ContentLength=SoapEnvelopeBytes.Length;
requestStream=httpRequest.GetRequestStream();
写入(SoapEnvelopeBytes,0,SoapEnvelopeBytes.Length);
requestStream.Close();
使用(HttpWebResponse=(HttpWebResponse)httpRequest.GetResponse())
{
StreamReader readStream=新的StreamReader(response.GetResponseStream(),Encoding.UTF8);
Response271=readStream.ReadToEnd();
}

决定发送SOAP1.1还是SOAP1.2消息

对于SOAP1.1,更改如下:

SoapEnvelope.Append("\"http://www.w3.org/2003/05/soap-envelope\"");
httpRequest.ContentType = "text/xml;charset=UTF-8";
httpRequest.Headers.Add("SOAPAction", "EligXsdRealTimeTransaction");
为此:

SoapEnvelope.Append("\"http://schemas.xmlsoap.org/soap/envelope/\"");
httpRequest.ContentType = "application/soap+xml; charset=utf-8;action=EligXsdRealTimeTransaction";
对于SOAP1.2,更改如下:

SoapEnvelope.Append("\"http://www.w3.org/2003/05/soap-envelope\"");
httpRequest.ContentType = "text/xml;charset=UTF-8";
httpRequest.Headers.Add("SOAPAction", "EligXsdRealTimeTransaction");
为此:

SoapEnvelope.Append("\"http://schemas.xmlsoap.org/soap/envelope/\"");
httpRequest.ContentType = "application/soap+xml; charset=utf-8;action=EligXsdRealTimeTransaction";

嗨,亚龙,谢谢。。我得到了回答。。您还可以告诉我如何在soap请求的HTTP头中发送用户名pwd吗。最好,我喜欢使用wsdl中的内置类,创建一个代理。。然后从那里开始…您可以像这样添加标题httpRequest.Headers.add。(只需找到一个工作请求并查看要发送的值)。如果您想对WCF代理教程使用代理搜索如果您正在使用MessageFactory创建SOAP消息,那么对于SOAP 12,请使用此MessageFactory mf=MessageFactory.newInstance(SOAPConstants.SOAP_1_2_协议);