Завершенное событие не запускается для веб-службы в некоторых системах - PullRequest
0 голосов
/ 12 января 2011

Это довольно странная проблема, с которой я сталкиваюсь в приложении WCF / Silverlight.Я использую WCF для получения данных из базы данных для моего приложения Silverlight, и завершенное событие не запускается для метода в WCF в некоторых системах.Я проверил, что вызываемый метод выполняется правильно, возвращает значения.Я проверил через Fiddler, и он ясно показывает, что ответ также имеет возвращенные значения.Однако завершенное событие не запускается.Более того, в нескольких системах все в порядке, и я могу обработать возвращаемое значение в завершенном методе.

Буду очень признателен за любые мысли или предложения.Я пытался искать в Интернете, но безуспешно: (

Ниже приведен код .. Вызов метода ..

void RFCDeploy_Loaded(object sender, RoutedEventArgs e)
    {
        btnSelectFile.IsEnabled = true;
        btnUploadFile.IsEnabled = false;
        btnSelectFile.Click += new RoutedEventHandler(btnSelectFile_Click);
        btnUploadFile.Click += new RoutedEventHandler(btnUploadFile_Click);
        RFCChangeDataGrid.KeyDown += new KeyEventHandler(RFCChangeDataGrid_KeyDown);
        btnAddRFCManually.Click += new RoutedEventHandler(btnAddRFCManually_Click);
        ServiceReference1.DataService1Client ws = new BEVDashBoard.ServiceReference1.DataService1Client();
        ws.GetRFCChangeCompleted += new EventHandler<BEVDashBoard.ServiceReference1.GetRFCChangeCompletedEventArgs>(ws_GetRFCChangeCompleted);
        ws.GetRFCChangeAsync();
        this.BusyIndicator1.IsBusy = true;
    }

Завершенное событие ....

void ws_GetRFCChangeCompleted(object sender, BEVDashBoard.ServiceReference1.GetRFCChangeCompletedEventArgs e)
    {
        PagedCollectionView view = new PagedCollectionView(e.Result);
        view.GroupDescriptions.Add(new PropertyGroupDescription("RFC"));
        RFCChangeDataGrid.ItemsSource = view;
        foreach (CollectionViewGroup group in view.Groups)
        {
            RFCChangeDataGrid.CollapseRowGroup(group, true);
        }
        this.BusyIndicator1.IsBusy = false;
    }

Обратите внимание, что в этом WCF также есть множество других методов, и все они работают нормально ... У меня проблема только с этим методом ...

Спасибо...

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Эта проблема связана со специальными символами в одном из полей, возвращаемых из БД, которые браузер не смог отобразить.После значительной отладки и поиска по сети, удалось выяснить это.Используя регулярные выражения для удаления этих специальных символов в WCF, новые возвращаемые значения из метода были успешно обработаны в различных браузерах на разных системах.:)

0 голосов
/ 13 января 2011

Как уже отмечали другие, взглянуть на часть вашего кода поможет. Но кое-что нужно проверить:

(1) Отключите «Включить только мой код» в разделе «Отладка / Параметры / Отладка / Общие» и установите некоторые точки останова в файле Reference.cs, чтобы увидеть, получают ли попадание какие-либо низкоуровневые методы обратного вызова.

(2) Подтвердите, что вы устанавливаете обработчики завершенных событий и в правой части прокси-клиента. Если вы устанавливаете обработчики событий для одного экземпляра и делаете вызов для другого, это может привести к описанному вами поведению.

(3) Поэкспериментируйте с MS Service Trace Viewer, как описано здесь , и посмотрите, есть ли какие-либо очевидные ошибки (обычно полезно выделены красным).

Скорее всего, есть другие вещи, которые вы могли бы проверить, но это займет вас на один день или около того: -).

(правки внесены после публикации кода)

(4) Возможно, вы захотите попробовать определить переменную ws на уровне класса, а не функции. Теоретически, если для него определен обработчик события, это означает, что он не будет собирать мусор, но это все же немного странно, поскольку, как только вы выходите из функции, у вас больше нет к нему дескриптора, и, следовательно, не может делать такие важные вещи, как, скажем, закрывать его.

(5) Если вы еще этого не сделали, попробуйте перестроить прокси-класс в диалоговом окне «Добавить ссылку на службу» в Visual Studio. Я видел случайную странную проблему, когда веб-сервис изменился незначительно, а клиент не был обновлен для отражения изменений: некоторые методы будут вызываться успешно, другие - нет.

(6) Если вы, вероятно, одновременно открываете несколько экземпляров прокси-клиента, рассмотрите возможность объединения их в один экземпляр (и используйте необязательный параметр "object userState" вызова метода для передачи обратного вызова, так что вы не столкнетесь с неприятной возможностью назначения нескольких обработчиков событий). В прошлом я сталкивался с неприятными проблемами, когда несколько экземпляров наступали друг на друга, и в настоящее время я рекомендую структурировать мой код таким образом, чтобы в каждый момент времени был открыт только один экземпляр клиента. Я знаю, что это не обязательно то, что говорит MS, но это был мой опыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...