WebHttpBinding и обратные вызовы - PullRequest
0 голосов
/ 07 июня 2011

У меня есть сайт asp.net, где я вызываю службу WCF с помощью jQuery.Иногда служба WCF должна иметь возможность запрашивать пользователя с подтверждением чего-либо и зависеть от выбора пользователя: либо продолжить, либо отменить работу

мне помогает обратный вызов?или любая другая идея приветствуется!

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Ваша архитектура неверна. Почему:

  • Служба не может перезвонить браузеру клиента. Реальный обратный вызов через HTTP работает как обратная связь - клиент - это хостинг, вызываемый клиентом. Клиент в вашем случае - браузер - как вы хотите разместить сервис в браузере? Как вы хотите открыть порт для входящего общения из браузера? Решения, использующие функциональность «обратного вызова», основаны на объединении службы в пул. Вы можете использовать таймер JavaScript и реализовать свой собственный механизм объединения.
  • Клиентский браузер не может инициировать распределенную транзакцию, поэтому вы не можете запустить транзакцию на клиенте. Вы также не можете использовать транзакции на стороне сервера для нескольких операций, потому что для каждого сеанса требуется создание экземпляров, что в свою очередь требует sessinoful канала.
  • Службы WCF JSON / REST не поддерживают обратный вызов HTTP (двусторонняя связь).
  • Службы WCF JSON / REST не создают решение для пула - вы должны сделать это сами
  • Службы WCF JSON / REST не поддерживают распределенные транзакции
  • Службы WCF JSON / REST не поддерживают сессионные каналы / сеансы на стороне сервера

Это был технический аспект вашего решения.

Ваше решение больше похоже на сценарий для службы Workflow, где вы запускаете рабочий процесс, и оно работает до некоторой точки, где оно ожидает ввода пользователя. Пока ввод не предоставлен, рабочий процесс может быть сохранен в базе данных, поэтому обычно пользователь может предоставить ввод через несколько дней. Когда ввод предоставлен, услуга может продолжаться. Запуск службы и предоставление каждого необходимого ввода моделируется как отдельная операция, вызываемая клиентом. Это не обычный сценарий для чего-то, вызываемого из JavaScript, но это должно быть возможно, потому что вы можете написать собственный WebHttpContextBinding для поддержки рабочих процессов. Он все равно не достигнет ситуации, когда пользователю будет автоматически что-то предложено - это ваша обязанность определить, когда должно появиться всплывающее окно, и обработать его.

Если вы выйдете из стандартного мира WCF, вы можете проверить решения, такие как COMET, которые обеспечивают AJAX push / callback.

2 голосов
/ 07 июня 2011

Контракты обратного вызова не будут работать в этом сценарии, так как они в основном для дуплексной связи, и в WebHttpBinding нет дуплекса (есть решение для сценария дуплексного опроса в Silverlight, и я видел одну реализацию в javascript, которая использует его, но это, вероятно, слишком сложно для вашего сценария).

Что вы можете сделать, это разделить операцию на две части. Первый «запустит» операцию и вернет идентификатор и некоторую дополнительную информацию, чтобы сообщить клиенту, будет ли операция только что завершена или нужна дополнительная информация. В первом случае клиент может затем вызвать вторую операцию, передав идентификатор для получения результата. Во втором случае клиент снова совершит вызов, но передаст дополнительную информацию, необходимую для завершения операции (или отмены).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...