Эта проблема действительно странная и ускользает от моих попыток отладки. Это происходит только при запуске приложения на планшете Surface. Это не происходит на планшете Asus или при работе в Visual Studio. В конкретном сценарии, когда включен режим полета, выдается исключение WebException, которое я абсолютно не могу поймать. Я даже не совсем уверен, что в моем коде вызывает это, потому что некоторые из моих журналов не происходят после определенного момента в коде по неизвестной причине. Я могу только предположить, что это вызвано HttpWebRequest из-за типа выдаваемого исключения, которое, по-видимому, исходит от внутреннего компонента .NET. Вот единственная отладочная информация, которую я могу получить. Это из средства просмотра событий 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, мобильной связи или Ethernet, но это не улавливает условие, когда он подключен к сети, которая не имеет подключения к Интернету. WinRT не имеет решения для проверки подключения к Интернету, и даже метод, который я использую, неудобен для работы (он просто возвращает число -- http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/d8e76732-19d3-47b3-840f-70d87c75ce9f).
Exception Code Block
действительно так выглядит..? вы не обрабатываете никаких исключений - person MethodMan   schedule 08.04.2013