Справочная служба клиента ошибка? - PullRequest
0 голосов
/ 16 августа 2011

Привет, у меня есть приложение WPF, которое использует ссылку на веб-службу ...

Теперь у меня есть GUI-компонент, который отслеживает прогресс этого ...

Но у меня, похоже, здесь какая-то ошибка, это происходит только на некоторых машинах и не часто .. Я начинаю вызов с MethodNameAsync и отображаю индикатор выполнения, пока не произойдет соответствующее событие Completed.

иногда я вызываю 3 разных асинхронных метода подряд, но только два из них вызывают событие Completed, поэтому графический интерфейс пользователя будет заблокирован, а приложение должно быть перезапущено.

После нескольких недель полного разочарования я обнаружил событие AppDomain.CurrentDomain.FirstChanceException, поэтому я подключился к нему и начал регистрировать все исключения FirstChanceException ..

Перед вызовом второго события выдается исключение 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, который никогда не завершится ..

Edit:

Исправьте это временно, не используя асинхронные методы и вместо этого используя поток, который будет вызывать их один за другим ... теперь это не элегантное решение, я должен иметь возможность использовать асинхронные методы ...

1 Ответ

1 голос
/ 16 августа 2011

Подсказка здесь: «Не удается получить доступ к удаленному объекту».

Что иногда случается с кодом обратного вызова, так это то, что код, который должен прослушивать обратный вызов, был удален, поэтому, когда обратный вызов возвращается, никто не слушает.

...