Übertragungsmodus gestreamte wird nicht von ReliableSessionBindingElement unterstützt

StackOverflow https://stackoverflow.com/questions/1800782

  •  05-07-2019
  •  | 
  •  

Frage

Ich bin der Gestaltung eines Duplex-Kanal Wcf-Dienst eine benutzerdefinierte Bindung verwenden. Derzeit, wenn ich meine Klassenbibliothek kompilieren, ich die folgende Fehlermeldung erhalten:

  

Transfer Modus gestreamte ist nicht   unterstützt durch   ReliableSessionBindingElement.

Unten ist mein App.config:

<service behaviorConfiguration="transferServiceBehavior" 
               name="API.FileTransfer.FileTransferService">
        <endpoint address="json" 
                  behaviorConfiguration="WebHttpEPBehavior"
                  binding="webHttpBinding" 
                  bindingConfiguration="jsonWeb" 
                  name="MyJSONFileTransferEP"
                  contract="API.FileTransfer.IJSONFileTransferService" />
        <endpoint address="pox" 
                  behaviorConfiguration="WebHttpEPBehavior"
                  binding="webHttpBinding" 
                  bindingConfiguration="poxWeb" 
                  name="MyPOXFileTransferEP"
                  contract="API.FileTransfer.IPOXFileTransferService" />
        <endpoint address="soap" 
                  behaviorConfiguration="NetTcpEPBehavior"
                  binding="netTcpBinding" 
                  bindingConfiguration="netTcpWeb" 
                  name="MySOAPFileTransferEP"                   
                contract="API.FileTransfer.ISOAPFileTransferService" />
        <endpoint address="mex" 
                  binding="mexTcpBinding" 
                  bindingConfiguration=""
                  contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:2544/filetransfer/" />
            <add baseAddress="net.tcp://localhost:2544/filetransfer/" />
          </baseAddresses>
        </host>
</service>

Der Fehler Ich erhalte bezieht sich auf meine benutzerdefinierte Bindung, die beide reliableSession und compositeDuplex Bindungselemente:

<customBinding>
    <binding name="netTcpCustom" 
             closeTimeout="00:01:00"
             openTimeout="00:01:00"
             receiveTimeout="00:10:00"
             sendTimeout="00:01:00">
      <reliableSession />
      <compositeDuplex />
      <oneWay />
      <windowsStreamSecurity protectionLevel="None" />
      <mtomMessageEncoding  />
      <tcpTransport maxBufferPoolSize="524288"
                    maxReceivedMessageSize="2147483647" 
                    connectionBufferSize="8192"
                    hostNameComparisonMode="StrongWildcard" 
                    channelInitializationTimeout="00:01:00"
                    maxBufferSize="2147483647" 
                    maxPendingConnections="20" 
                    maxOutputDelay="00:00:00.2000000"
                    maxPendingAccepts="5" 
                    transferMode="Streamed" 
                    listenBacklog="20"
                    portSharingEnabled="false" 
                    teredoEnabled="false">
        <connectionPoolSettings groupName="default" leaseTimeout="00:05:00"
            idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" />
      </tcpTransport>
    </binding>
  </customBinding>

Nach einiger Suche fand ich heraus, dass Sie nicht Streaming verwenden können, wenn zuverlässiges Messaging (WS-RM). Dies liegt daran, WS-RM benötigt Unterzeichnung / Prüfsummen für die gesamte Nachricht als Einheit anzuwenden, etc; und dies ist nicht möglich, wenn transfer gestreamt, nur mit gepufferten transfer.

Da ich ein Duplex-Bindungskanal bin die Gestaltung und ich bin mit diesem Service für den Upload von großen Dateien, ich brauche transfer = gestreamte und die zuverlässige Sitzung Bindungselement.

Weiß jemand, wie dies angreifen? Können Sie mir zeigen, wie es gemacht wird?

Vielen Dank im Voraus.

War es hilfreich?

Lösung 2

Ich beginne zu glauben, dass die Antwort auf diese Frage „nicht möglich“ sein kann.

Ich habe MSDN geprüft und zahlreiche Foren und sie alle führen in eine Sackgasse. scheint Streaming ohne reliableSession möglich ist oder umgekehrt, aber so Bis jetzt habe ich nicht in der Lage gewesen, ein Beispiel für die Kombination der beiden zu finden.

Andere Tipps

Wenn Sie die Sicherheitsfunktion einschalten (z Security = etwas anderes als None) eine Sitzung auf NetTcpBinding kommen werde, glaube ich. Es können auch andere Knöpfe, eine Sitzung zur Verfügung zu stellen, oder Sie können eine benutzerdefinierte Bindung mit tcp als Transport- und reliableSession als verbindendes Element erstellen. Ich habe nicht alle Einzelheiten erinnern, aber hoffentlich das sind einige Starter.

Oh keine Wartezeit, gibt es einen Knopf für sie:

http://msdn.microsoft.com /en-us/library/system.servicemodel.nettcpbinding.reliablesession.aspx

Siehe auch

http://blogs.msdn.com/drnick /archive/2006/06/05/617703.aspx

Wir haben ein System gebaut, wo die Nutzer hochladen und herunterladen können sehr große Dateien, ohne Streaming zu verwenden.

Der Hauptgrund Streaming zu verwenden ist, dass es Speicher effizient ist.

Das einzige, was Sie wirklich brauchen, um es zu machen Arbeit viel RAM. Sie sollten auch sicherstellen, dass Sie richtig alle Objekte verfügen, wie in diesem Fall Speicherlecks zu Problemen führen werden.

Ich würde vorschlagen, zu einem Duplex-Wechsel-Bindung in dem Sie mehrere Nachrichten zwischen dem Client und Server austauschen können. Dann chunk Ihre Ergebnisse in einzelne Teile (also nicht eine Tonne Speicher raubend) und als Mehrfachantworten auf dem Duplex-Kanal senden.

Mit Duplex können Sie auch ermöglichen sicheren Kanal und zuverlässige Sitzung, von denen keiner mit Streaming-Bindung zur Verfügung steht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top