C#中的Soap请求

ste*_*fan 9 javascript c# xml soap visual-studio

我有一个肥皂请求,我用http和javascript编写,但我似乎无法正确地将其转换为C#.

原件:(作品)

<button onclick="doStuff()" type="submit">Send</button>

<textarea name="REQUEST_DATA" cols=120 rows=17 >
<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<createModifyRequest>
<username>josephs</username>
<lookupIds>
<lookupIds>4225</lookupIds><!--firepass-->
</lookupIds>
</createModifyRequest>
</soap:Body>
</soap:Envelope>
</textarea>

<script language="javascript"> 

function doStuff() {

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("POST", "http://tpdev-itreq.transpower.co.nz:7777/usr/services/CreateModifyRequest", false);
xmlhttp.setRequestHeader("SOAPAction", "createModifyRequest");

var userpass = "josephs" + ":" + "pass";
xmlhttp.setRequestHeader("Authorization", "Basic " + (userpass));

xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.send(REQUEST_DATA.value);

}
Run Code Online (Sandbox Code Playgroud)

用C#转换(不起作用)

private void button1_Click(object sender, EventArgs e)
{
    string soap =@"<?xml version=""1.0"" encoding=""utf-8""?>
    <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
      xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
   xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
  <soap:Body>
    <createModifyRequest>
        <username>josephs</username>
        <lookupIds>
            <lookupIds>4225</lookupIds>
            <!--firepass-->
       </lookupIds>
    </createModifyRequest>
  </soap:Body>
</soap:Envelope>";

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://tpdev-itreq.transpower.co.nz:7777/usr/services/CreateModifyRequest");
    req.Headers.Add("SOAPAction", "\"createModifyRequest\"");

    var userpass = "josephs" + ":" + "pass";

    req.Headers.Add("Authorization", "Basic " + (userpass));
    // req.Headers.Add("Content-Type", "text/xml");

    req.ContentType = "text/xml;charset=\"utf-8\"";
    req.Accept = "text/xml";
    req.Method = "POST";

    using (Stream stm = req.GetRequestStream())
    {
        using (StreamWriter stmw = new StreamWriter(stm))
        {
            stmw.Write(soap);
        }
    }

    WebResponse response = req.GetResponse();

    Stream responseStream = response.GetResponseStream();
    // TODO: Do whatever you need with the response
}
Run Code Online (Sandbox Code Playgroud)

在我运行C#代码的那一刻,我得到一个内部500服务器错误,所以我做错了什么?

Fin*_*001 2

我已尝试重现您的问题。目前我无法创建您的请求,但我已使用您的数据生成了本地请求。我知道的一件事是,如果我删除 utf-8 周围的双引号(“)并且它工作正常。只需传递charset=utf-8而不是charset=\"utf-8\""

我不确定它是否适合你。