Могу ли я реализовать обратный вызов из службы HTTP на основе WCF для клиента gSOAP c/Linux?

У меня есть клиентское приложение Linux/c, которое подключается к веб-службе WCF через HTTP/SOAP (BasicHTTPBinding). Я использую gSOAP. Могу ли я осуществить звонки на веб-сервис с помощью обратного вызова? Я хочу получить данные асинхронно, как обратный вызов.

Обновление: я обновил название вопроса.

3 ответа

Решение

WCF поддерживает дуплексные службы или те, которые могут перезвонить запрашивающему клиенту. Дуплексные услуги могут быть очень сложными, так как они не только отслеживают состояние, но и накладывают требование на выполнение контракта для своих клиентов.

Дуплексные службы требуют использования WSDuplexHttpBinding. Вам нужно будет использовать OperationContext, чтобы получить ссылку на канал обратного вызова. Ваши клиенты ДОЛЖНЫ реализовывать контракт обратного вызова в некотором классе и предоставлять InstanceContext, который содержит экземпляр класса обратного вызова для клиентского прокси. Связь в обоих направлениях должна поддерживаться, и, если клиент находится за собственным брандмауэром или через Интернет, решить эту проблему может быть сложно. Будьте внимательны при написании дуплексных служб... они часто доставляют больше хлопот, чем стоят... поэтому убедитесь, что они действительно вам нужны.;-)

Следующая страница может быть полезна:

http://msdn.microsoft.com/en-us/library/ms731064.aspx

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

Я сталкиваюсь с той же проблемой, и подход, который я пробую, состоит в том, чтобы иметь пару серверов / клиентов gsoap. По сути, каждый процесс будет прослушивать порт для мыльных вызовов и делать клиентские вызовы на другой сервер. Таким образом, я избегаю опроса или других сложных подходов. Код должен быть, очевидно, потокобезопасным для любой бизнес-логики, но комбинированная пара клиент / сервер является самым простым решением, о котором я до сих пор думал.

Очевидно, что нужно контролировать обе стороны решений - упомянутый сервер и упомянутый клиент.

Другие вопросы по тегам