Frage

Nehmen wir an, dass ich mit einem Dienst zu tun habe, die große Mengen von Daten beinhaltet senden.

Wenn ich dies implementieren mit WCF, wird WCF drosseln den Dienst auf, wie viel Speicher jeder Anforderung zu bedienen nimmt? Oder werde ich jedes Mal aus der Erinnerung Ausnahmen kontinuierlich bekomme ich eine große Anzahl von Treffern zu meinem Dienst?

Ich bin sehr neugierig, wie mit diesem Problem außerhalb der WCF zu tun hat, ich bin immer noch ein bisschen Neuentwicklung Service ...

War es hilfreich?

Lösung

Bei der Verwendung der Bindungseigenschaften und ReaderQuotas wie Andrew Hare wird für die meisten praktischen Anwendungen für im Wesentlichen eine unbegrenzte Größe schlägt lassen, bedenken Sie, dass die Sie in andere Themen wie Timeouts ausgeführt werden, wenn Sie einen langer Laufbefehl akzeptieren, egal wie dieser Dienst aufgebaut ist (unter Verwendung von WCF oder nicht).

Egal, was die Größe Ihrer Nachricht ist, muß der WCF-Dienst für die Leistung zu drosseln, so dass es nicht überschwemmt wird. Wenn Sie es in IIS oder WAS hosten, müssen Sie zusätzliche integrierte Funktionen zu diesen Hosting-Umgebungen, die Ihren Dienst machen viel mehr „hochverfügbar“. Allerdings müssen Sie noch die Aufmerksamkeit auf Parallelitätsprobleme zahlen. Die folgenden WCF Config stellt ein Beispiel für einige Drosselungswerte zu setzen.

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>

Andere Tipps

hat WCF eine Standard-Nutzlastgrößenbeschränkung, die Nachrichten über eine bestimmte Anzahl von Bytes ablehnen. Dies ist konfigurierbar natürlich im Bindungsbereich Ihrer Konfigurationsdatei. Hier ist ein grobes Beispiel mit einem basicHttpBinding zeigt Ihnen viele der Attribute Ihnen zur Verfügung:

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

Die Idee ist, dass man viele verschiedene Bindungen erstellen können, die Sie für verschiedene Szenarien verwenden können. Das ist schön, wie Sie die Feinabstimmung können, wie Sie Ihre Dienstleistungen verbraucht werden und nur die Nachrichtengröße für die Endpunkte erhöhen, die sie benötigen.

Wenn Sie mit NetTcpBinding oder NetNamedPipeBinding können Sie die MaxConnections Eigenschaft verwenden:

<bindings>
  <netTcpBinding>
    <binding name="myTCPBinding" maxConnections="15"/>
  </netTcpBinding>
</bindings>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top