在我的SL4应用程序中,我有一个服务调用,svc.SubmitAsync()。由于这是一个异步调用,一旦方法被命中,我的代码就会转到下一行。只要用户输入正确的用户名和密码,这就没问题。如果没有,EndSubmit()会抛出异常。 EndSubmit()位于References.cs中,是自动生成的Silverlight代码的一部分。
我尝试在try-catch中包装svc.SubmitAsync(),但这是一个异步调用,并且甚至在抛出异常之前try-catch块就完成了。
如何捕获此错误?
谢谢!
更新1
public void SubmitTweetAsync(TestSilverlightApp.svc.Tweet tweet, object userState) {
if ((this.onBeginSubmitTweetDelegate == null)) {
this.onBeginSubmitTweetDelegate = new BeginOperationDelegate(this.OnBeginSubmitTweet);
}
if ((this.onEndSubmitTweetDelegate == null)) {
this.onEndSubmitTweetDelegate = new EndOperationDelegate(this.OnEndSubmitTweet);
}
if ((this.onSubmitTweetCompletedDelegate == null)) {
this.onSubmitTweetCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSubmitTweetCompleted);
}
base.InvokeAsync(this.onBeginSubmitTweetDelegate, new object[] {
tweet}, this.onEndSubmitTweetDelegate, this.onSubmitTweetCompletedDelegate, userState);
}
更新2 - 这是一个WCF服务。
答案 0 :(得分:1)
您必须检查处理程序中收到的参数中的“错误”字段。
private void Client_SubmitCompleted(object sender, SubmitCompletedEventArgs e)
{
if (e.Cancelled)
{
//...
}
else if (e.Error != null)
{
// the service operation threw an exception
throw e.Error;
}
else
{
//...
}
答案 1 :(得分:0)
通常是匹配的已完成事件,其中包含任何异常的try / catch。
与异步操作一样,它不知道它是否成功,直到它完成,但在任何一种情况下都会完成。
答案 2 :(得分:0)
传递给您的对象Completed事件处理程序将需要保存错误消息。
例如
public void OnSubmitCompleted(TweetOperation op) { if(op.ErrorMessage!= null)//处理错误
}