c# Webrequest Post et GetResponse

Je suis en train d'écrire un programme qui va le soumettre à un XML à un site web. Le code fonctionne correctement, mais parfois il s'arrête de fonctionner pour une raison quelconque, jetant un
Système.Net.ProtocolViolationException. Je peux fermer le programme et exécutez de nouveau - il commence à travailler de nouveau très bien.

Voici le code que j'utilise:

private string Summit(string xml)
{
string result = string.Empty;
StringBuilder sb = new StringBuilder();
try {
WebRequest request = WebRequest.Create(this.targetUrl);
request.Timeout = 800 * 1000;
RequestState requestState = new RequestState(xml);
requestState.Request = request;
request.ContentType = "text/xml";
//Set the 'Method' property  to 'POST' to post data to a Uri.
requestState.Request.Method = "POST";
requestState.Request.ContentType = "text/xml";
//Start the Asynchronous 'BeginGetRequestStream' method call.    
IAsyncResult r = (IAsyncResult)request.BeginGetRequestStream(new AsyncCallback(ReadCallBack), requestState);
//Pause the current thread until the async operation completes.
//Console.WriteLine("main thread waiting...");
allDone.WaitOne();
//Assign the response object of 'WebRequest' to a 'WebResponse' variable.
WebResponse response = null;
try {
response =request.GetResponse();
} catch (System.Net.ProtocolViolationException ex) {
response = null;
request.Abort();
request = null;
requestState = null;
return "";
}
//Console.WriteLine("The string has been posted.");
//Console.WriteLine("Please wait for the response...");
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
Char[] readBuff = new Char[256];
int count = streamRead.Read(readBuff, 0, 256);
//StringBuilder sb = new StringBuilder();
while (count > 0) {
String outputData = new String(readBuff, 0, count);
sb.Append(outputData);
count = streamRead.Read(readBuff, 0, 256);
}
//Close the Stream Object.
streamResponse.Close();
streamRead.Close();
//allDone.WaitOne();
//Release the HttpWebResponse Resource.
response.Close();
//return sb.ToString();
} catch (WebException webex) {
Debug.WriteLine(webex.Message);
} catch (System.Web.Services.Protocols.SoapException soapex) {
Debug.WriteLine(soapex.Message);
} catch (System.Net.ProtocolViolationException ex) {
Debug.WriteLine(ex.Message);
} catch (Exception ex) {
Debug.WriteLine(ex.Message);
}
return sb.ToString();
}
private static void ReadCallBack(IAsyncResult asyncResult)
{
try {
RequestState myRequestState = (RequestState)asyncResult.AsyncState;
WebRequest myWebRequest2 = myRequestState.Request;
//End of the Asynchronus request.
Stream responseStream = myWebRequest2.EndGetRequestStream(asyncResult);
//Convert  the string into a byte array.
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] ByteArray = encoder.GetBytes(myRequestState.Xml);
//Write data to the stream.
responseStream.Write(ByteArray, 0, myRequestState.Xml.Length);
responseStream.Close();                  
} catch (WebException e) {
Console.WriteLine("\nReadCallBack Exception raised!");
Console.WriteLine("\nMessage:{0}", e.Message);
Console.WriteLine("\nStatus:{0}", e.Status);
}
allDone.Set();
}

response =request.GetResponse() , c'est quand il échoue et génère une erreur

Vous devez fournir un corps de requête si vous définissez ContentLength>0 ou
SendChunked==true. Le faire en appelant [Begin]GetRequestStream avant
[Begin]GetResponse.

Toute aide serait grandement appréciée.

Je suppose que vous devez fournir à la demande avec un contentLength tels que : msdn.microsoft.com/en-us/library/... msdn.microsoft.com/en-us/library/...
Salut, j'ai essayé ça aussi .. mais pas de chance .. Merci

OriginalL'auteur user2664502 | 2013-08-08