服务参考客户端错误?

时间:2011-08-16 11:48:03

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

您好我有一个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从未完成..

编辑:

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

1 个答案:

答案 0 :(得分:1)

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

回调代码有时会发生的事情是应该监听回调的代码已被处理掉,所以当回调回来时,没有人在听。