2013-05-19 1 views
0

Я начал работу над приложением Windows 8 store, которое должно связываться с сервисом WCF, работающим как служба Windows на сервере Windows 7. Связывание - net.tcp, без безопасности (пока). Я также зашел в файл Package.appxmanifest и проверил «Интернет (клиент)» и «Частные сети (клиент и сервер)» как в моем основном проекте приложения, так и в модульном тестовом проекте. Это отлично работает в проекте тестирования модулей, я могу общаться с моей службой WCF, запущенной на машине Windows 7, но я не могу получить доступ к службе в самом приложении Windows 8. Приложение просто зависает при вызове прокси-сервера webservice. Я просто пропустил что-то простое с разрешениями/возможностями манифеста?Доступ к службе WCF в приложении Windows Store зависает

EDIT: У меня на самом деле это работает. Мой интерфейс службы возвратил Task<IList<MyDataObj>>, и реализация была асинхронной (используется ключевое слово async в реализации метода). Когда я запустил его в модульном тесте, я бы назвал GetItems(), затем Wait() по возвращенной задаче. Копирование этого приложения в приложение не получится. Когда я изменил свой код в приложении и await вместо вызова задачи, вызов был выполнен в службу WCF. Мой вопрос в этот момент заключается в том, какая разница между двумя средами и что вызовет вызов просто зависать?

ответ

2

Я объясню это тупиковой ситуации on my blog и in an MSDN article.

Краткое описание состоит в том, что await (по умолчанию) будет захватывать текущий контекст и возобновлять метод async в этом контексте.

В приложениях пользовательского интерфейса этот контекст является контекстом пользовательского интерфейса, но если вы блокируете поток с вызовом Wait, то метод async не может повторно войти в контекст пользовательского интерфейса для завершения.

В (большинстве) модульных модулей тестирования контекст представляет собой контекст пула потоков, поэтому Wait блокирует только один поток пула потоков, а метод async может продолжаться на другом.