Ваша архитектура неправильная. Почему:
- Служба не может переадресовать браузер клиента. Реальный callback по HTTP работает как обратная связь - клиент - это услуга хостинга, вызываемая клиентом. Клиент в вашем случае - браузер - как вы хотите разместить службу в браузере? Как вы хотите открыть порт для входящей связи из браузера? Решения, использующие функциональность «обратного вызова», основаны на объединении службы. Вы можете использовать таймер JavaScript и реализовать свой собственный механизм объединения.
- Клиентский браузер не может инициировать распределенную транзакцию, чтобы вы не могли начать транзакцию на клиенте. Вы также не можете использовать транзакцию на стороне сервера по нескольким операциям, потому что для нее требуется односеансовый запуск, который, в свою очередь, требует sessinoful канала.
- Услуги WCF JSON/REST не поддерживают обратный вызов HTTP (дуплексная связь).
- WCF JSON услуги/REST не строят Объединив решение для вас - вы должны сделать это сами
услуги/REST
- WCF JSON не поддерживают распределенные транзакции
- WCF JSON услуги/REST не поддерживают sessionful каналов/серверные сессии
Это был технический аспект вашего решения.
Ваше решение больше похоже на сценарий службы Workflow, где вы запускаете рабочий процесс, и работает до некоторой точки, где он ждет ввода пользователя. До тех пор, пока не будет предоставлен вход, рабочий процесс может быть сохранен в базе данных, поэтому обычно пользователь может предоставить вход через несколько дней. Когда вход предоставляется, услуга может продолжаться. Запуск службы и предоставление каждого необходимого ввода моделируется как отдельная операция, вызванная клиентом. Это не обычный сценарий для чего-то, вызванного JavaScript, но это должно быть возможно, потому что вы можете написать пользовательский WebHttpContextBinding для поддержки рабочих процессов. Он по-прежнему не достигнет ситуации, когда пользователь будет автоматически просить что-то - это ваша ответственность, чтобы найти, когда всплывающее окно должно появиться и обработать его.
Если вы оставите стандартный мир WCF, вы можете проверить такие решения, как COMET, который обеспечивает push/callback AJAX.
Спасибо, Карлос! Могу ли я обернуть эти две операции в транзакции? делает webHttpbinding поддерживает трансакции? BTW Я нашел статью, где парень говорит о таких возможностях, но он не объясняет подробности. Http://jamesstory.wordpress.com/2007/09/04/wcf-and-the-webhttpbinding/ – RinatMegenbaev
Я не думаю, что REST услуги поддержки транзакций. WebHttpBinding определенно нет. В сообщении упоминается, что он смог заставить службу ответить «вызовом функции» (по существу, JSONP), и это решает проблему совершения междоменных вызовов. Но если в вашей функции вы хотите отправить некоторую информацию обратно в службу, вам нужно будет сделать другой звонок. BTW, JSONP не был доступен на 3.5, но он доступен с версии 4.0 фреймворка. – carlosfigueira