HTTP リスナー サービスと通信するアプリを作成しています。
このPosting Posting with HttpWebRequest on Windows Phone 7からコードを取得しました
このコードはほぼ完全に機能しているように見えますが、最初の呼び出しでは機能しません。
呼び出しはサービスに対して行われており、エラーはスローされていません。戻り値だけが空です。
2 回目の呼び出しでは、問題なく戻り値を取得しています。別のページに移動してもう一度戻ると、最初に戻り値も取得されます。これは、アプリが最初に起動されたときの最初の呼び出しでのみ発生します。
どんなアイデアでも大歓迎です。以下のコード。
サービス
DiagnosticLog.Write(99, DateTime.Now, "Phone Listener Called");
IAsyncResult phoneResult = PhoneListener.BeginGetContext(new AsyncCallback(Phone), PhoneListener);
HttpListenerContext context = null;
HttpListenerResponse response = null;
HttpListener _listener = (HttpListener)result.AsyncState;
context = _listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
response = context.Response;
//response.ContentType = "text/plain";
string postData = string.Empty;
using (StreamReader sr = new StreamReader(request.InputStream))
{
DiagnosticLog.Write(99, DateTime.Now, "Reading Stream");
postData = sr.ReadToEnd();
}
byte[] buffer;
System.IO.Stream output = response.OutputStream;
if (postData == "islogin")
{
buffer = System.Text.Encoding.UTF8.GetBytes("logincorrect");
// Get a response stream and write the response to it.
response.ContentLength64 = buffer.Length;
output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
DiagnosticLog.Write(99, DateTime.Now, "Good Return sent");
output.Close();
}
else
{
buffer = System.Text.Encoding.UTF8.GetBytes("loginincorrect");
// Get a response stream and write the response to it.
response.ContentLength64 = buffer.Length;
output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
DiagnosticLog.Write(99, DateTime.Now, "Bad Return sent");
output.Close();
}
CODE(電話アプリ)
WebRequest request = WebRequest.Create("http://127.0.0.1:8080/phone");
request.Method = "POST";
request.BeginGetRequestStream(ar =>
{
var requestStream = request.EndGetRequestStream(ar);
using (StreamWriter sw = new StreamWriter(requestStream))
{
sw.Write("islogin");
}
request.BeginGetResponse(a =>
{
try
{
WebResponse response = request.EndGetResponse(a);
Stream responseStream = response.GetResponseStream();
using(var sr = new StreamReader(responseStream))
{
Storage.ReturnValue = sr.ReadToEnd().ToString();
}
}
catch(WebException ex)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(ex.ToString());
});
}
}, null);
}, null);
txtLoginUsername.Text = Storage.ReturnValue;