2013-05-19 63 views
0

我已經開始使用Windows 8商店應用,該應用需要與在Windows 7服務器上作爲Windows服務運行的WCF服務進行通信。綁定是net.tcp,沒有安全性(還)。我也進入了Package.appxmanifest文件,並在我的主應用程序項目和單元測試項目中選中了「Internet(客戶端)」和「專用網絡(客戶端和服務器)」。這在單元測試項目中可以正常工作,我可以與在Windows 7機器上運行的WCF服務通信,但我無法訪問Windows 8應用程序本身的服務。應用程序只是掛在對web服務代理的調用上。我只是缺少一些簡單的權限/清單功能?訪問Windows應用商店應用中的WCF服務掛起

編輯:我已經得到它的工作。我的服務接口返回了Task<IList<MyDataObj>>,並且實現是異步的(在方法實現中使用了async關鍵字)。當我在單元測試中運行它時,我會在返回的任務上調用GetItems(),然後Wait()。複製到應用程序,它不會工作。當我在應用程序周圍更改我的代碼並改爲執行任務調用時,調用的是WCF服務。我現在的問題是,這兩種環境之間有什麼區別,以及什麼會導致電話掛起?

回答

2

我解釋了這個死鎖情況on my blogin an MSDN article

簡短摘要是await(默認情況下)將捕獲當前上下文並在該上下文中恢復async方法。

在UI應用程序中,該上下文是一個UI上下文,但是如果您通過調用Wait來阻止該線程,那麼async方法無法重新輸入UI上下文來完成。

在(大多數)單元測試框架中,上下文是一個線程池上下文,因此Wait只能阻塞一個線程池線程,並且該方法可以在另一個線程池上繼續。

相關問題