在Windows应用商店应用中访问WCF服务会挂起

时间:2013-05-19 20:43:02

标签: wcf windows-store-apps net.tcp

我已经开始研究需要与在Windows 7服务器上作为Windows服务运行的WCF服务进行通信的Windows 8商店应用。绑定是net.tcp,没有安全性(尚未)。我还进入了Package.appxmanifest文件并在我的主应用程序项目和单元测试项目中检查了“Internet(客户端)”和“专用网络(客户端和服务器)”。这在单元测试项目中运行良好,我可以与在Windows 7机器上运行的WCF服务进行通信,但是我无法在Windows 8应用程序本身中访问该服务。应用程序只挂起对webservice代理的调用。我只是缺少一些简单的权限/清单功能吗?

编辑:我实际上已经开始工作了。我的服务接口返回Task<IList<MyDataObj>>,实现是异步的(在方法实现上使用了async关键字)。当我在单元测试中运行它时,我会在返回的Task上调用GetItems(),然后调用Wait()。将此复制到应用程序,它将无法正常工作。当我在应用程序中更改我的代码并await编辑任务调用时,调用了WCF服务。我现在的问题是,两种环境之间有什么区别以及什么会导致呼叫只是挂起?

1 个答案:

答案 0 :(得分:2)

我解释了这种死锁情况on my blogin an MSDN article

简短摘要是await(默认情况下)将捕获当前上下文并在该上下文中恢复async方法。

在UI应用程序中,该上下文是UI上下文,但如果您通过调用Wait来阻止该线程,则async方法无法重新进入UI上下文以完成

在(大多数)单元测试框架中,上下文是一个线程池上下文,因此Wait只阻塞一个线程池线程,而async方法可以在另一个上继续。