この問題は本当に奇妙で、私のデバッグの試みを逃してしまいました。Surface タブレットでアプリを実行している場合にのみ発生します。Asus タブレットや Visual Studio での実行中は発生しません。機内モードがオンになっている特定のシナリオでは、絶対にキャッチできない WebException がスローされます。コードの特定の時点以降、未知の理由でログが記録されないため、コードの何が原因なのか完全にはわかりません。内部の.NETコンポーネントから発生しているように見える例外のタイプがスローされるため、HttpWebRequestが原因であるとしか思えません。これが私が入手できる唯一のデバッグ情報です。これは、Windows イベント ビューアーからのものです。
Application: <myappname.exe>
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.WebException
Stack:
at System.Net.ServicePoint.ConnectSocketCallback(System.IAsyncResult)
at System.Net.LazyAsyncResult.Complete(IntPtr)
at System.Net.ContextAwareResult.Complete(IntPtr)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
at System.Net.Sockets.Socket.ConnectCallback()
at System.Net.Sockets.Socket.RegisteredWaitCallback(System.Object, Boolean)
at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object, Boolean)
提供するデバッグ情報がもっとあればいいのにと思いますが、どこにでもたくさんのtry / catchブロックがあり、ほとんどの呼び出しの後にログに記録することで、考えられるすべてを試しました-そのうちのいくつかは実行されません. 何がこれを引き起こしているのか、誰にも手がかりがありますか?
編集1:
トレースに基づいて、例外はここのどこかでスローされたようです。事実上すべてが try/catch ブロックにラップされているため、WebException がどのようにすり抜けている可能性があるのか わかりません。
byte[] bytes = Encoding.UTF8.GetBytes(requestXml.ToString());
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = "text/xml";
try
{
IAsyncResult requestResult = (IAsyncResult)request.BeginGetRequestStream((rAsyncResult) =>
{
using (Stream uploadStream = request.EndGetRequestStream(rAsyncResult))
{
try
{
uploadStream.Write(bytes, 0, bytes.Length);
uploadStream.Flush();
}
catch (Exception e)
{
// Exception handling
}
finally
{
uploadStream.Dispose();
}
}
IAsyncResult responseResult = (IAsyncResult)request.BeginGetResponse((resAsyncResult) =>
{
try
{
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(resAsyncResult))
{
try
{
data = ProcessResponse(XmlReader.Create(response.GetResponseStream()));
}
catch (Exception e)
{
// Exception handling
}
finally
{
response.Dispose();
}
}
}
catch (WebException e)
{
// Exception handling
}
}, null);
}, null);
}
catch (Exception e)
{
// Exception handling
}
編集2:
私はまだ受け入れられる解決策を見つけていません。私は現在、事前に接続タイプをチェックしており、WiFi、モバイル、またはイーサネットに接続されていない場合はコードを続行できませんが、インターネット接続のないネットワークに接続されているという条件をキャッチしません。WinRT にはインターネット接続を確認するソリューションがありません。また、私が使用している方法でさえ、使いにくいものです (番号を返すだけです。http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp /thread/d8e76732-19d3-47b3-840f-70d87c75ce9f )。