2010-12-10 15 views
10

Pourquoi wsHttpBinding ne prend-il pas en charge le streaming?Pourquoi wsHttpBinding ne prend-il pas en charge le streaming?

EDIT: Pour tester mon commentaire sur netTcpBinding, j'ai essayé code suivant, qui donne erreur d'exécution:

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

exception Durée:

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

si <reliableSession enabled="true"/> est supprimé, le code fonctionne.

+2

Parce qu'ils ne l'ont pas conçu. –

Répondre

12

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

Comme indiqué here ... plus d'informations sur WS-RM.

Il y a aussi un autre poste here qui fournit le raisonnement pour ne pas être en mesure de flux par rapport au pourquoi ... ci-dessus

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...

En outre netTcpBinding se sert d'WS-RM à des fins de fiabilité.

+1

merci. une idée de pourquoi WS-RM exige que les messages soient tamponnés? Le netTcpBinding offre à la fois la fiabilité et le streaming, donc je suppose que la fiabilité n'exclut pas le streaming. – morpheus

+0

@morpheus Ajouté commentaires supplémentaires ... –