Wcf 如何使用C#for HTTPWebRequest构造soap服务请求?

Wcf 如何使用C#for HTTPWebRequest构造soap服务请求?,wcf,soap,httpwebrequest,http-headers,soap-client,Wcf,Soap,Httpwebrequest,Http Headers,Soap Client,我在这里写的是使用HTTPWebRequest for Windows Phone应用程序的soap服务中的查询。我将按照以下步骤构造请求并传递到服务器。但是我无法连接到这个服务器,返回“远程服务器返回了一个错误:NotFound”。但是我可以很好地使用Fiddler工具 第一步 -->创建具有所需标题的请求。(请验证是否以正确的方式添加了“SOAPAction”标题。) 步骤2:发送添加正文内容的请求 private static void GetRequestStreamCallback(I

我在这里写的是使用HTTPWebRequest for Windows Phone应用程序的soap服务中的查询。我将按照以下步骤构造请求并传递到服务器。但是我无法连接到这个服务器,返回“远程服务器返回了一个错误:NotFound”。但是我可以很好地使用Fiddler工具

第一步

-->创建具有所需标题的请求。(请验证是否以正确的方式添加了“SOAPAction”标题。)

步骤2:发送添加正文内容的请求

private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    // End the operation
    Stream postStream = request.EndGetRequestStream(asynchronousResult);
    //StreamWriter streamWriter = new StreamWriter(postStream, Encoding.UTF8);

    StringBuilder soapRequest = new StringBuilder("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">");
    soapRequest.Append("<s:Body>");
    soapRequest.Append("<GetVersions xmlns=\"https://www.onsite.soaptestingserver.com/Reports1.1/WS/Retrieve.svc\">");
    soapRequest.Append("<Request xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">");
    soapRequest.Append("<Language>en-EN</Language>");
    soapRequest.Append("</Request>");
    soapRequest.Append("</GetVersions></s:Body></s:Envelope>");
    string postData = soapRequest.ToString();

    // Convert the string into a byte array.
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);

    // Write to the request stream.
    postStream.Write(byteArray, 0, postData.Length);
    postStream.Close();

    // Start the asynchronous operation to get the response
    request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}

private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

    // End the operation /* I'm getting the exception in the next line as "The remote server returned an error: NotFound."*/
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
    Stream streamResponse = response.GetResponseStream();
    StreamReader streamRead = new StreamReader(streamResponse);
    string responseString = streamRead.ReadToEnd();
    Console.WriteLine(responseString);
    // Close the stream object
    streamResponse.Close();
    streamRead.Close();

    // Release the HttpWebResponse
    response.Close();           
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest请求=(HttpWebRequest)asynchronousResult.AsynchState;
//结束手术
Stream postStream=request.EndGetRequestStream(asynchronousResult);
//StreamWriter StreamWriter=新的StreamWriter(postStream,Encoding.UTF8);
StringBuilder soapRequest=新的StringBuilder(“”);
soapRequest.Append(“”);
soapRequest.Append(“”);
soapRequest.Append(“”);
soapRequest.Append(“en-en”);
soapRequest.Append(“”);
soapRequest.Append(“”);
字符串postData=soapRequest.ToString();
//将字符串转换为字节数组。
byte[]byteArray=Encoding.UTF8.GetBytes(postData);
//写入请求流。
Write(byteArray,0,postData.Length);
postStream.Close();
//启动异步操作以获取响应
BeginGetResponse(新的异步回调(GetResponseCallback),请求);
}
私有静态void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest请求=(HttpWebRequest)asynchronousResult.AsynchState;
//结束操作/*我在下一行得到异常,因为“远程服务器返回了一个错误:NotFound。”*/
HttpWebResponse=(HttpWebResponse)request.EndGetResponse(asynchronousResult);
streamResponse=response.GetResponseStream();
StreamReader streamRead=新的StreamReader(streamResponse);
字符串responseString=streamRead.ReadToEnd();
控制台。写入线(响应线);
//关闭流对象
streamResponse.Close();
streamRead.Close();
//发布HttpWebResponse
response.Close();
}

能否在Windows Phone应用程序中使用“添加服务引用”?这就是方法。嗨,John,我需要根据用户输入的服务url切换到不同的服务。因此,我无法使用“添加服务引用”。请您建议我是否有其他方法来实现此功能。@Kamal,您可以从一个url生成服务,然后(在创建服务客户端实例时)指定另一个url(可能由用户输入)
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    // End the operation
    Stream postStream = request.EndGetRequestStream(asynchronousResult);
    //StreamWriter streamWriter = new StreamWriter(postStream, Encoding.UTF8);

    StringBuilder soapRequest = new StringBuilder("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">");
    soapRequest.Append("<s:Body>");
    soapRequest.Append("<GetVersions xmlns=\"https://www.onsite.soaptestingserver.com/Reports1.1/WS/Retrieve.svc\">");
    soapRequest.Append("<Request xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">");
    soapRequest.Append("<Language>en-EN</Language>");
    soapRequest.Append("</Request>");
    soapRequest.Append("</GetVersions></s:Body></s:Envelope>");
    string postData = soapRequest.ToString();

    // Convert the string into a byte array.
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);

    // Write to the request stream.
    postStream.Write(byteArray, 0, postData.Length);
    postStream.Close();

    // Start the asynchronous operation to get the response
    request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}

private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

    // End the operation /* I'm getting the exception in the next line as "The remote server returned an error: NotFound."*/
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
    Stream streamResponse = response.GetResponseStream();
    StreamReader streamRead = new StreamReader(streamResponse);
    string responseString = streamRead.ReadToEnd();
    Console.WriteLine(responseString);
    // Close the stream object
    streamResponse.Close();
    streamRead.Close();

    // Release the HttpWebResponse
    response.Close();           
}