0

我有一个 Silverlight 项目调用 WCF 服务。服务方法 GetData 有一个参数 dataID,通过 GetDataAsync 调用,并由具有函数 BeginGetData 和 EndGetData 的自动创建的类处理。在某些情况下,调用会在 EndGetData 中引发 TimeoutException(这很好,它自己调用某些第三方服务的 WCF 服务,有时它们可​​能已关闭或有问题,所以我不想增加超时值)。

我想做的是能够使用发送到 GetDataAsync 的 dataID 采取行动(例如安排对 GetData 的新调用或向用户显示适当的错误消息,指示哪些数据流失败)。如何才能做到这一点?如果我在 EndGetData 中设置断点,则 IAsyncResult 类型的结果参数将是一个 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult 对象,该对象具有 RPC 属性,我可以在调试时找到该参数,但该类不可用代码,因为它被声明为 Friend。

这是可能的还是有人对如何以另一种方式实现我想要的行为有想法?

4

1 回答 1

1

而是实现应该由 Visual Studio 自动生成的 Completed EventHandler。您还可以使用自己的 userState 值调用。

void GetData(int dataID)
{
  client.GetDataCompleted += GetDataCompleted;
  client.GetDataAsync(dataID, dataID); //the 2nd param being the userState object
}

void GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
  var dataId = (int)e.UserState;
}

如果发生错误,EventArgs 也将包含异常:

if (e.Error != null)
  throw e.Error;

避免更改/使用自动生成的方法。

于 2012-06-13T08:05:58.117 回答