![](/img/trans.png)
[英]Windows Phone 8 connection check WebClient throws dreaded System.Net.WebException
[英]System.Net.WebException not intercepted on Windows Phone 8
我正在尝试使用RestSharp调用Web服务(必须从WP8开始进行此操作)。
这是我触发的方法:
private async void postRest()
{
string getSyncService = "MyService";
var client = new RestClient(ip);
var request = new RestRequest(getSyncService, Method.POST);
request.RequestFormat = DataFormat.Json;
JsonObject jsonGenericRequest = new JsonObject();
jsonGenericRequest.Add("companyid", "123");
jsonGenericRequest.Add("token", "123"); ...
request.AddParameter("GenMobileRequest", jsonGenericRequest);
request.AddHeader("Access-Control-Allow-Methods", "POST");
request.AddHeader("Content-Type", "application/json; charset=utf-8");
request.AddHeader("Accept", "application/json");
try
{
// easy async support
client.ExecuteAsync(request, response =>
{
Console.WriteLine("response content: " + response.Content);
if (response.ResponseStatus == ResponseStatus.Completed)
{
MessageBox.Show("errorMsg: " + response.ErrorMessage);
}
});
}
catch (System.Net.WebException ex)
{
MessageBox.Show(" " + ex.InnerException.ToString());
}
}
在我的日志中,我得到了这个异常:
System.Windows.ni.dll中发生了类型为'System.Net.WebException'的异常,在托管/本地边界之前未进行处理
我什至无法在处理程序中保留任何信息
// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
Console.WriteLine(" ---Application_UnhandledException---");
if (Debugger.IsAttached)
{
// An unhandled exception has occurred; break into the debugger
Debugger.Break();
}
}
我如何获得有关出了什么问题的更多信息?
有关调用WS的正确方法的任何其他信息,将不胜感激。
谢谢
来源: https : //blogs.msdn.microsoft.com/ptorr/2014/12/10/async-exceptions-in-c/
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace AsyncAndExceptions
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += (s, e) => Log("*** Crash! ***", "UnhandledException");
TaskScheduler.UnobservedTaskException += (s, e) => Log("*** Crash! ***", "UnobservedTaskException");
RunTests();
// Let async tasks complete...
Thread.Sleep(500);
GC.Collect(3, GCCollectionMode.Forced, true);
}
private static async Task RunTests()
{
try
{
// crash
// _1_VoidNoWait();
// crash
// _2_AsyncVoidAwait();
// OK
// _3_AsyncVoidAwaitWithTry();
// crash - no await
// _4_TaskNoWait();
// crash - no await
// _5_TaskAwait();
// OK
// await _4_TaskNoWait();
// OK
// await _5_TaskAwait();
}
catch (Exception ex) { Log("Exception handled OK"); }
// crash - no try
// await _4_TaskNoWait();
// crash - no try
// await _5_TaskAwait();
}
// Unsafe
static void _1_VoidNoWait()
{
ThrowAsync();
}
// Unsafe
static async void _2_AsyncVoidAwait()
{
await ThrowAsync();
}
// Safe
static async void _3_AsyncVoidAwaitWithTry()
{
try { await ThrowAsync(); }
catch (Exception ex) { Log("Exception handled OK"); }
}
// Safe only if caller uses await (or Result) inside a try
static Task _4_TaskNoWait()
{
return ThrowAsync();
}
// Safe only if caller uses await (or Result) inside a try
static async Task _5_TaskAwait()
{
await ThrowAsync();
}
// Helper that sets an exception asnychronously
static Task ThrowAsync()
{
TaskCompletionSource tcs = new TaskCompletionSource();
ThreadPool.QueueUserWorkItem(_ => tcs.SetException(new Exception("ThrowAsync")));
return tcs.Task;
}
internal static void Log(string message, [CallerMemberName] string caller = "")
{
Console.WriteLine("{0}: {1}", caller, message);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.