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

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

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


person Kangkan    schedule 19.02.2010    source источник


Ответы (3)


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

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

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

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

person jrista    schedule 25.02.2010
comment
Спасибо за ваш приятный отзыв. Не могли бы вы также сообщить мне, возможна ли такая реализация обратного вызова на портативном компьютере c/Linux с gSOAP. - person Kangkan; 25.02.2010
comment
Я не совсем уверен. Я слышал о gSOAP, но мало о нем знаю. WCF — это больше, чем просто платформа веб-сервисов SOAP/WSDL. Он поддерживает несколько протоколов и типов привязки, которые обычно не поддерживаются другими платформами. Когда дело доходит до дуплексных веб-служб, я не верю, что существует какой-либо стандарт для межплатформенной поддержки, поэтому gSOAP должен поддерживать дуплексную реализацию WCF, чтобы быть совместимым. - person jrista; 25.02.2010

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

person tgeros    schedule 25.02.2010
comment
Спасибо. В таком случае я хотел бы пойти на вызовы синхронизации. - person Kangkan; 02.03.2010

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

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

person Dragos    schedule 02.10.2013
comment
Спасибо @Dragos. Для меня ситуация немного другая. Тем не менее +1 за то, что поделился этой информацией, которая может помочь где-то еще. - person Kangkan; 03.10.2013