【问题标题】:Service Reference client bug?服务参考客户端错误?
【发布时间】:2011-08-16 11:48:02
【问题描述】:

您好,我有一个 WPF 应用程序,它使用对 Web 服务的服务引用...

现在我有一个 GUI 组件来跟踪这个进度...

但我似乎在这里有某种错误,它只发生在某些机器上,并不经常发生.. 我使用 MethodNameAsync 开始调用并显示进度条,直到发生匹配的 Completed 事件。

有时我会连续调用 3 个不同的异步方法,但只有其中两个会引发 Completed 事件,因此 GUI 将被锁定并且必须重新启动应用程序。

在完全沮丧几周后,我发现了事件 AppDomain.CurrentDomain.FirstChanceException,所以我连接到它并开始记录所有 FirstChanceExceptions..

在引发第二个事件之前,会引发 System.Net.Sockets.SocketException “提供了无效参数”,然后引发 System.ObjectDisposedException “无法访问已处置的对象”。被抛出都是第一次机会异常..

我猜我的 wcf 客户端在发生这种情况时忘记了第三个方法调用,但我的加载指示器没有..

那么这是一个已知的错误还是我错过了什么?

按要求编辑代码:

mCheckInService = New CheckInServiceClient()
AddHandler mCheckInService.GetPersonActivitiesCompleted, AddressOf CheckInService_GetPersonActivitiesCompleted
AddHandler mCheckInService.GetPersonArticlesCompleted, AddressOf CheckInService_GetPersonArticlesCompleted
AddHandler mCheckInService.GetPersonImageCompleted, AddressOf CheckInService_GetPersonImageCompleted


Dim workItem As WorkItem = Context.WorkDisplayService.AddWorkItem(Me, Resources.Label.DownloadingPersomImage)
mCheckInService.GetPersonImageAsync(Context.Session, person, workItem)

workItem = Context.WorkDisplayService.AddWorkItem(Me, "Hämtar aktiviteter")
mCheckInService.GetPersonActivitiesAsync(Context.Session, Person, workItem)

workItem = Context.WorkDisplayService.AddWorkItem(Me, Resources.Label.DownloadingPersonArticles)
mCheckInService.GetPersonArticlesAsync(Context.Session, person, workItem)


Private Sub CheckInService_GetPersonActivitiesCompleted(ByVal sender As Object, ByVal e As GetPersonActivitiesCompletedEventArgs)
    Dim workItem As WorkItem = CType(e.UserState, WorkItem)
    If (Context.WorkDisplayService.FinishWorkItem(Me, workItem)) Then

Private Sub CheckInService_GetPersonArticlesCompleted(ByVal sender As Object, ByVal e As GetPersonArticlesCompletedEventArgs)
    Logger.Trace("CheckInService_GetPersonArticlesCompleted()")
    Dim workItem As WorkItem = CType(e.UserState, WorkItem)
    If (Context.WorkDisplayService.FinishWorkItem(Me, workItem)) Then

Private Sub CheckInService_GetPersonImageCompleted(ByVal sender As Object, ByVal e As GetPersonImageCompletedEventArgs)
    Logger.Trace("CheckInService_GetPersonImageCompleted()")
    Dim workItem As WorkItem = CType(e.UserState, WorkItem)
    If (Context.WorkDisplayService.FinishWorkItem(Me, workItem)) Then

它的 GetPersonActivitiesAsync 永远不会完成..

编辑:

通过不使用异步方法而是使用将一个一个调用它们的线程来临时修复此问题。现在这不是一个优雅的解决方案,我应该能够使用异步方法...

【问题讨论】:

  • 请展示一些代码,如何创建代理,如何调用方法等

标签: .net vb.net wcf .net-4.0 web-reference


【解决方案1】:

这里的线索是“无法访问已处置的对象”。

回调代码有时会发生的情况是,应该监听回调的代码已经被释放,所以当回调返回时,没有人在监听。

【讨论】:

  • 好的,这听起来不错,但我没有什么反应,因为它只是作为第一次机会异常抛出并由代理处理?..
  • System.ObjectDisposedException 无法访问已处置的对象。对象名称:System.Net.Sockets.NetworkStream。 vid System.Net.Sockets.NetworkStream.UnsafeBeginWrite(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state) 我无法访问网络流...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多