2010-12-10 19 views
10

Dlaczego usługa wsHttpBinding nie obsługuje przesyłania strumieniowego?Dlaczego wsHttpBinding nie obsługuje przesyłania strumieniowego?

EDIT: Aby przetestować mój komentarz o netTcpBinding, próbowałem poniższy kod, co daje błąd wykonania:

<netTcpBinding > 
     <binding name="myBinding" transferMode="Streamed">   
      <reliableSession enabled="true"/> 
     </binding> 
</netTcpBinding> 

Runtime wyjątek:

Unhandled Exception: System.InvalidOperationException: Transfer mode Streamed is 
not supported by ReliableSessionBindingElement. 
    at System.ServiceModel.Channels.ReliableSessionBindingElement.VerifyTransport 
Mode(BindingContext context) 

jeśli <reliableSession enabled="true"/> zostanie usunięta, kod działa.

+2

Ponieważ nie zaprojektowały go. –

Odpowiedz

12

WsHttpBinding doesn't support streaming due to the reliable messaging protocol (WS-RM), which requires that messages are buffered on either end.

Jak stwierdzono here ... więcej szczegółów o WS-RM.

Jest też kolejny post here który dostarcza uzasadnienia dla nie jest w stanie przesyłać kontra dlaczego powyżej ...

This is because WS-RM needs to apply signing/checksums to the whole message as a unity, etc; and this is not possible when streamed transferMode, only with buffered transferMode...

Ponadto netTcpBinding faktycznie korzysta z WS-RM do celów niezawodność.

+1

dzięki. jaki jest pomysł, dlaczego WS-RM wymaga buforowania komunikatów? NetTcpBinding oferuje zarówno niezawodność, jak i streaming, więc zgaduję, że niezawodność nie wyklucza przesyłania strumieniowego. – morpheus

+0

@morpheus Dodano dodatkowy komentarz ... –

Powiązane problemy