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