2009-10-05 7 views
5

So senden Sie eine große Datei vom Client zum Server mit WCF in C#? Unterhalb des Konfigurationscodes.So senden Sie eine große Datei vom Client zum Server mithilfe von WCF?

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="HttpStreaming_IStreamingSample" 
         maxReceivedMessageSize="67108864" 
          transferMode="Streamed"> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint 
      address="http://localhost:4127/StreamingSample.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="HttpStreaming_IStreamingSample" 
      contract="StreamingSample.IStreamingSample" 
      name="HttpStreaming_IStreamingSample" /> 
    </client> 
</system.serviceModel> 
+0

OK, das ist die Client-Konfiguration. Bitte zeigen Sie auch Server-Konfiguration und den Service-Vertrag (wie sieht Ihre Methode aus, die Sie anrufen?) –

Antwort

6

Sie müssen Streaming auschecken, wie Dzmitry bereits darauf hingewiesen hat.

Um in der Lage sein, große Dateien als Stream, um Ihren Dienst zu senden müssen Sie an:

  • eine Service-Methode erstellen, die
  • erstellen Bindung ein Stream als Eingangsparameter akzeptiert Konfiguration (auf dem Server und dem Client), die transferMode=StreamedRequest
  • einen Stream in Ihrem Client erstellen und senden es an die Service-Methode verwendet

Also zunächst einmal müssen Sie eine Methode in Ihrem Servicevertrag:

[ServiceContract] 
interface IYourFileService 
{ 
    [OperationContract] 
    void UploadFile(Stream file) 
} 

Dann benötigen Sie eine Bindungskonfiguration:

<bindings> 
    <basicHttpBinding> 
    <binding name="FileUploadConfig" 
      transferMode="StreamedRequest" /> 
    </basicHttpBinding> 
</bindings> 

und einen Service-Endpunkt auf Ihrem Dienst mit, dass die Bindung Konfiguration:

<services> 
    <service name="FileUploadService"> 
    <endpoint name="UploadEndpoint" 
       address="......." 
       binding="basicHttpBinding" 
       bindingConfiguration="FileUploadConfig" 
       contract="IYourFileService" /> 
    </service> 
</services> 

und dann, in Ihrem Client, müssen Sie zB öffnen ein Filestream und senden Sie das an die Service-Methode, ohne es zu schließen.

Hoffe, dass hilft!

Marc

+0

Danke für den Beitrag. Ich habe das bereits versucht, aber es wirft die folgende Ausnahme "Der Remote-Server gab einen Fehler zurück: (400) Bad Request" – Charan

+0

das klingt wie etwas mit Ihrer Konfiguration ist nicht in Ordnung - können Sie Client-und Server-Konfiguration, die Sie jetzt haben Deine ursprünglichen Fragen? Nur die Abschnitte. Vielen Dank! –

+0

Charan

2

Neben readerQuota Einstellungen zu erhöhen (siehe oben) musste ich auch auf die maxRequestLength innerhalb des Httpruntime-Attribut.

<system.web> 
    <httpRuntime maxRequestLength="2097151" /> 
</system.web>