1

我有一個奇怪的小問題,我在SL4應用程序中使用WCF RIA服務。這裏是我得到的按鈕點擊處理程序的代碼:SL4 WCF RIA查詢問題:「完成」在真正完成之前發生?

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); 
       } 
      }; 
    } 

請注意,處理程序中有一個Sleep調用。如果沒有這個睡眠調用,我會得到一個異常(向服務器發送請求時發生傳輸級錯誤(provider:Shared Memory Provider,錯誤:0 - 沒有進程在管道的另一端)。如果這段代碼位於「Completed」處理程序中,我認爲它實際上完成了它到達那裏的時間。爲什麼它沒有睡眠()?而死?順便說一句,睡眠()不是一個生產的選項,它只是一個問題,sovling工具:)

+0

順便說一下,這是一個在EF模型上作用於SQL Server 2008 R2 DB的域服務...如果這對你很重要。 – 2010-08-13 15:13:43

+0

同樣,如果它很有用,在我的SQL Server上啓用命名管道。這裏是連接字符串:Data Source = .; Initial Catalog = TDS; Integrated Security = True; MultipleActiveResultSets = True – 2010-08-13 15:21:59

回答

1

所以,如果我添加「pooling = false」到我的連接字符串,一切正常。但是,我不太喜歡這個答案。連接池是一件好事。有沒有辦法讓它繼續下去,讓事情仍然有效?

+0

我想我必須使用pooling = false。我還沒有找到任何其他方法。 – 2010-09-09 16:44:36

0

我也可以重現這個問題。

例如,我有一個單元測試,如果連續運行兩次將失敗的第二次。

這個單元測試執行的幾件事情:
1.刪除並使用自定義的實體框架4.1的DbContext Initiailzer
2.啓動Silverlight應用程序
3.單擊Silverlight應用程序的按鈕重新創建數據庫

此時,silverlight應用程序調用wcf ria服務來查詢剛創建的數據庫。
但是,每次單元測試再次運行時,我都會得到相同的錯誤。
但是,如果我再次點擊按鈕,錯誤會立即消失。

在我的連接字符串中設置「Pooling = False」並不能解決問題。

但是,我能夠通過在數據庫創建後重新啓動託管silverlight應用程序和ria服務的Web服務器來解決此問題。

就我而言,我只是決定使用Cassini Dev Web Server v4並在該Web服務器上運行測試而不是iis。

的Windows 7旗艦版64位
的Visual Studio 2010 SP1
實體框架4.1
WCF RIA服務SP1的Silverlight 4
的Silverlight 4
MSTest的

編輯:
實體框架4.1更新1包含一個錯誤修復程序,用於在使用SQL身份驗證時刪除在連接字符串中指定「Persist Security Info = True」的需要。
http://www.microsoft.com/download/en/details.aspx?id=26825

我不(確定)該錯誤是否相關並可能解決此問題。

相關問題