Как обратные вызовы WCF работают через HTTP?

насколько я понимаю, в HTTP клиент подключается к серверу и запрашивает данные. Сервер не может вызвать клиента. Если это так, то как работают обратные вызовы WCF?

спасибо,

Джо

2 ответов


при использовании с HTTP транспортом сервер тут позвонить клиенту. Чтобы заставить это работать, клиент должен быть на общедоступной конечной точке, поэтому брандмауэры и то, что у вас есть, должны быть настроены соответствующим образом.

от http://msdn.microsoft.com/en-us/magazine/cc163537.aspx:

из-за своей бесконтактной природы HTTP не может использоваться для обратных вызовов, и поэтому вы не можете использовать обратные вызовы через BasicHttpBinding или привязка wsHttpBinding. Windows Communication Foundation предлагает поддержку обратного вызова для NetTcpBinding и NetNamedPipeBinding, поскольку базовый транспорт является двунаправленным. Для поддержки обратных вызовов через HTTP Windows Communication Foundation предоставляет WSDualHttpBinding, который фактически устанавливает два канала HTTP: один для вызовов от клиента к службе и один для вызовов от службы к клиенту.

и из ссылки для WSDualHttpBinding http://msdn.microsoft.com/en-us/library/system.servicemodel.wsdualhttpbinding.aspx:

эта привязка требует, чтобы клиент имел открытый URI, который предоставляет конечную точку обратного вызова для службы. Это обеспечивается ClientBaseAddress. Двойная привязка предоставляет Службе IP-адрес клиента. Клиент должен использовать безопасность, чтобы убедиться, что он подключается только к службам, которым доверяет.


дуплексный HTTP-клиент WCF (например, при использовании wsDualHttpBinding) также запустит сервер, чтобы слушать запросы от "реального" сервера, когда он перезвонит.

Так что это не будет работать над NAT, чтобы назвать одну вещь.