Ваша архитектура неверна. Почему:
- Служба не может перезвонить браузеру клиента. Реальный обратный вызов через HTTP работает как обратная связь - клиент - это хостинг, вызываемый клиентом. Клиент в вашем случае - браузер - как вы хотите разместить сервис в браузере? Как вы хотите открыть порт для входящего общения из браузера? Решения, использующие функциональность «обратного вызова», основаны на объединении службы в пул. Вы можете использовать таймер JavaScript и реализовать свой собственный механизм объединения.
- Клиентский браузер не может инициировать распределенную транзакцию, поэтому вы не можете запустить транзакцию на клиенте. Вы также не можете использовать транзакции на стороне сервера для нескольких операций, потому что для каждого сеанса требуется создание экземпляров, что в свою очередь требует sessinoful канала.
- Службы WCF JSON / REST не поддерживают обратный вызов HTTP (двусторонняя связь).
- Службы WCF JSON / REST не создают решение для пула - вы должны сделать это сами
- Службы WCF JSON / REST не поддерживают распределенные транзакции
- Службы WCF JSON / REST не поддерживают сессионные каналы / сеансы на стороне сервера
Это был технический аспект вашего решения.
Ваше решение больше похоже на сценарий для службы Workflow, где вы запускаете рабочий процесс, и оно работает до некоторой точки, где оно ожидает ввода пользователя. Пока ввод не предоставлен, рабочий процесс может быть сохранен в базе данных, поэтому обычно пользователь может предоставить ввод через несколько дней. Когда ввод предоставлен, услуга может продолжаться. Запуск службы и предоставление каждого необходимого ввода моделируется как отдельная операция, вызываемая клиентом. Это не обычный сценарий для чего-то, вызываемого из JavaScript, но это должно быть возможно, потому что вы можете написать собственный WebHttpContextBinding для поддержки рабочих процессов. Он все равно не достигнет ситуации, когда пользователю будет автоматически что-то предложено - это ваша обязанность определить, когда должно появиться всплывающее окно, и обработать его.
Если вы выйдете из стандартного мира WCF, вы можете проверить решения, такие как COMET, которые обеспечивают AJAX push / callback.