我在Windows服務中託管了一個WCF服務。我有控制檯應用程序,我爲其添加了WCF服務引用併爲其生成了客戶端。在windows服務中託管的WCF服務的異步調用
我可以同步調用服務,但異步調用似乎並沒有工作。如果我附加服務器進程它根本沒有打到服務。
client= new ServiceClient();
client.DoSomething();//Works fine
client.DoSomethingAsync()//Doesnot work
這是已知的問題嗎?
我在Windows服務中託管了一個WCF服務。我有控制檯應用程序,我爲其添加了WCF服務引用併爲其生成了客戶端。在windows服務中託管的WCF服務的異步調用
我可以同步調用服務,但異步調用似乎並沒有工作。如果我附加服務器進程它根本沒有打到服務。
client= new ServiceClient();
client.DoSomething();//Works fine
client.DoSomethingAsync()//Doesnot work
這是已知的問題嗎?
的asynccall可能會在後臺的WorkerThread開始。所以可能發生的事情是,你的異步線程正在消失,因爲前臺線程已經完成它的處理。
除非你有一些邏輯,你撥打這個電話等待效應初探,或繼續在你的主線程一些其他工作後,後臺線程可以不必讓應用程序退出之前創建的時間。
這可以通過異步調用之後加入Thread.sleep代碼可以容易地測試。
client.DoSomethingAsync();
Thread.Sleep(1000);
發生這種情況的一個症狀是,您的服務意外啓動/停止,並且Windows會引發錯誤。
當您生成的客戶端,你打勾的框指定「生成異步操作」?
是的,我可以看到生成的代碼 – 2009-07-21 12:13:42
的異步方法,使剛要完全清楚,這是已在服務本身的DoSomething的方法自動生成客戶端的DoSomethingAsync方法?您還沒有嘗試在服務中公開自己的DoSomethingAsync方法? – 2009-07-21 12:18:45
yes..DoSomethingAsync方法在客戶端中爲服務中的DoSomething方法自動生成 – 2009-07-21 12:54:37
從代碼貼出來,我假設你沒有設置處理程序來處理來自異步方法的響應。你需要像msdn post底部的例子,你可以使用AddHanlder來處理響應。
有點像下面你做異步調用之前:
AddHandler client.DoSomethingCompleted, AddressOf DoSomethingCallback
隨着應對outome的方法:
Private Shared Sub DoSomethingCallback(ByVal sender As Object, ByVal e As DoSomethingCompletedEventArgs)
'Do something with e.Result
MsgBox e.Result
End Sub
如果你有
client.DoSomethingAsync()//Doesnot work
通話
然後你指定了回調完成事件的處理程序?
public event DoSomethingCompletedEventHandler DoSomethingCompleted;
會發生什麼情況是異步調用會關閉,但它將如何將任何結果發回給您?您需要爲此提供一個處理程序方法 - 將其連接到DoSomethingCompleted
事件處理程序!在這種方法中,您將獲得異步調用的結果,無論您需要做什麼,都可以使用它們。
馬克
謝謝..it添加睡眠後工作 – 2009-07-22 05:01:06
太棒了!很高興有幫助 – pavsaund 2009-07-24 05:05:51