Как обратные вызовы 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, чтобы назвать одну вещь.