SL4 WCF RIA Query Issue: «Завершено» происходит до того, как оно действительно будет завершено? - PullRequest
1 голос
/ 13 августа 2010

У меня странная маленькая проблема со службой RIA WCF, которую я использую в приложении SL4.Вот код для обработчика нажатия кнопки, который у меня есть:

    private void btnTest_Click(object sender, RoutedEventArgs e)
    {
        LanguageContext context = new LanguageContext();
        LoadOperation<Language> op = context.Load(context.GetLanguagesQuery());

        op.Completed += (obj, args) =>
            {
                if (!op.HasError)
                {
                    System.Threading.Thread.Sleep(500);
                    MessageBox.Show(context.Languages.FirstOrDefault().DisplayName);
                }
            };
    }

Обратите внимание, что в обработчике есть неактивный вызов.Без этого неактивного вызова я получаю исключение (при отправке запроса на сервер произошла ошибка транспортного уровня (поставщик: поставщик общей памяти, ошибка: 0 - на другом конце канала нет процесса).).Если этот код находится в обработчике «Завершено», я подумал, что он на самом деле, ну, в общем, завершен к тому времени, как он туда попал.Почему он умирает без сна ()?Кстати, Sleep () - не вариант для производства, это просто инструмент для решения проблем:)

Ответы [ 2 ]

1 голос
/ 13 августа 2010

Итак, если я добавлю «pooling = false» в строку подключения, все будет работать.Однако мне не очень нравится этот ответ.Пул соединений - это хорошо.Есть ли способ оставить все как есть и все еще работать?

0 голосов
/ 03 июля 2011

Я также могу воспроизвести эту проблему.

Например, у меня есть модульный тест, который при повторном запуске два раза завершится неудачей.

Этот модульный тест выполняет несколько вещей:
1. Удаляет и воссоздает базу данных, используя пользовательскую платформу Entity Framework 4.1 DbContext Initiailzer
2. Запускает приложение silverlight
3. Нажмите кнопку вприложение silverlight

В этот момент приложение silverlight выполняет вызов службы wcf ria для запроса только что созданной базы данных.
Однако каждый раз, когда юнит-тест запускается во второй раз, я получаюта же ошибка.
Но ошибка сразу исчезнет, ​​если я, например, нажму кнопку еще раз.

Установка «Pooling = False» в строке подключения не решила проблему в моем случае.

Однако, Мне удалось решить проблему, перезапустив веб-сервер, на котором размещается приложение silverlight и служба ria после создания базы данных.

В моем случаеЯ просто решил использовать Cassini Dev Web Server v4 и запустить тесты на этом веб-сервере вместо iis.

Windows 7 Ultimate x64
Visual Studio 2010 SP1
Entity Framework 4.1
Службы RIA WCF SP1 для Silverlight 4
Silverlight 4
MSTest

Edit:
Entity Framework 4.1 Update 1 содержит исправление ошибки, устраняющее необходимость указывать «Persist Security Info = True» в строке подключения при использовании аутентификации SQL.
http://www.microsoft.com/download/en/details.aspx?id=26825

Я (пока) не уверен, связана ли ошибка, и может решить и эту проблему.

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