Ich programmiere gerade eine Anwendung für Windows Phone 7. Diese Anwendung sendet zunächst und empfängt dann Daten von einem Server über HttpWebRequest. Meistens funktioniert es gut, aber manchmal, nach dem Empfang eines Teils der Daten richtig, bekomme ich eine NullReferenceException in Stream.Read() Funktion.
Die Kommunikation beginnt, wenn der Benutzer eine Taste drückt. Dann erstelle ich den HttpWebRequest:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUri);
request.Method = "POST";
request.BeginGetRequestStream(GetRequestStreamCallback, request);
Die Callback-Methode der Anfrage:
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
postStream = request.EndGetRequestStream(asynchronousResult);
this.bSyncOK = Send(); //This is my method to send data to the server
postStream.Close();
if (this.bSyncOK)
request.BeginGetResponse(GetResponseCallback, request);
else
manualEventWait.Set(); //This ManualResetEvent notify a thread the end of the communication, then a progressbar must be hidden
}
Die Rückrufmethode der Antwort:
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult) )
{
using (streamResponse = new StreamReader(response.GetResponseStream() ) )
{
this.bSyncOK = Recv(); //This is my generic method to receive the data
streamResponse.Close();
}
response.Close();
}
manualEventWait.Set(); //This ManualResetEvent notify a thread the end of the communication, then a progressbar must be hidden
}
Und schließlich ist dies der Code, bei dem ich die Ausnahme beim Lesen der Streamdaten erhalte:
int iBytesLeidos;
byte[] byteArrayUTF8 = new byte[8];
iBytesLeidos = streamResponse.BaseStream.Read(byteArrayUTF8, 0, 8); //NullReferenceException!!! -Server always send 8 bytes here-
Wenn die Anwendung startet, erstelle ich einen Hintergrund-Thread, der häufig Informationen an den Server sendet. Hintergrund- und manuelle Kommunikation können gleichzeitig laufen. Könnte dies ein Problem sein?
Gracias.