2009-10-05 16 views
5

Come inviare file di grandi dimensioni dal client al server utilizzando WCF in C#? Sotto il codice di configurazione.Come inviare file di grandi dimensioni dal client al server tramite 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, questa è la configurazione del client. Mostra anche la configurazione del server e il contratto di servizio (che aspetto ha il tuo metodo con cui stai chiamando?) –

risposta

6

È necessario controllare lo streaming, come già sottolineato Dzmitry.

Al fine di essere in grado di inviare file di grandi dimensioni come un flusso al vostro servizio, è necessario:

  • creare un metodo di servizio che accetta un Stream come il suo parametro di ingresso
  • creare un legame configurazione (sia sul server e il client), che utilizza transferMode=StreamedRequest
  • creare un flusso nel tuo client e inviarlo al metodo del servizio

Quindi, prima di tutto, è necessario un metodo nel contratto di servizio:

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

Allora avete bisogno di una configurazione di rilegatura:

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

e un endpoint del servizio sul servizio utilizzando la configurazione di legame:

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

e quindi, nel client, è necessario aprire ad es. un filestream e inviarlo al metodo di servizio senza chiuderlo.

Spero che questo aiuti!

Marc

+0

Grazie per il post. Ho già provato questo, ma lancia la seguente eccezione "Il server remoto ha restituito un errore: (400) Richiesta errata" – Charan

+0

che suona come qualcosa con la tua configurazione non è okay - puoi postare configurazione client e server che hai ora in le tue domande originali? Solo le sezioni . Grazie! –

+0

WCFFileStreamingDemo.IStreamingSample Charan

2

Oltre ad aumentare impostazioni readerQuota (di cui sopra) che ha anche il maxRequestLength all'interno dell'attributo httpRuntime.

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