1

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

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 - никакой процесс не находится на другом конце канала.)). Если этот код находится в обработчике «Завершено», я подумал, что на самом деле он был завершен к моменту его поступления. Почему он умирает без сна()? BTW, Sleep() не является вариантом для производства, это был просто инструмент для обработки проблем :)

+0

BTW, это служба домена, действующая на EF-модель для SQL Server 2008 R2 DB ...В случае, если это важно для вас. –

+0

Опять же, если это полезно, Named Pipes включены на моем SQL Server. И вот строка соединения: Источник данных =; Начальный каталог = TDS; Интегрированная безопасность = True; MultipleActiveResultSets = True –

ответ

1

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

+0

Я предполагаю, что мне нужно использовать pooling = false. Я не нашел другого подхода. –

0

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

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

Этот тестовый модуль выполняет несколько вещей:
1. Drops и воссоздает базу данных с помощью пользовательской Entity Framework 4.1 DbContext Initiailzer
2. запускает приложения Silverlight
3. Щелкните кнопку в приложении SilverLight

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

Настройка «Объединение = False» в моей строке подключения не разрешила проблему в моем случае.

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

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

Windows 7 Ultimate x64
Visual Studio 2010 SP1
Entity Framework 4.1
WCF RIA Services 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

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

Смежные вопросы