2009-10-05 27 views
5

Cómo enviar archivos grandes de cliente a servidor usando WCF en C#? Debajo del código de configuración.Cómo enviar archivos grandes de cliente a servidor usando 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

Bien, esta es la configuración del cliente. Por favor, también muestre la configuración del servidor y el contrato de servicio (¿cómo se ve el método que está llamando?) –

Respuesta

6

Debes consultar la transmisión, como ya señaló Dzmitry.

Con el fin de ser capaz de enviar archivos de gran tamaño como una corriente a su servicio, tendrá que:

  • crear un método de servicio que acepta un Stream como su parámetro de entrada
  • crear una vinculación configuración (tanto en el servidor y el cliente) que utiliza transferMode=StreamedRequest
  • crear una corriente en su cliente y enviarlo al método de servicio

Así que en primer lugar, es necesario un método en su contrato de servicio:

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

entonces usted necesita una configuración de enlace:

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

y un extremo de servicio de su servicio en dicho configuración de enlace:

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

y luego, en su cliente, necesita abrir, por ejemplo un filestream y enviarlo al método de servicio sin cerrarlo.

Espero que ayude!

Marc

+0

Gracias por la publicación. Ya lo he intentado, pero arroja la siguiente excepción "El servidor remoto devolvió un error: (400) Solicitud incorrecta" – Charan

+0

que suena como algo con su configuración no está bien, ¿puede publicar las configuraciones de cliente y servidor que tiene ahora en sus preguntas originales? Solo las secciones . ¡Gracias! –

+0

WCFFileStreamingDemo.IStreamingSample Charan

2

Además de aumentar los ajustes readerQuota (mencionados anteriormente) que tenía que también el maxRequestLength dentro del atributo httpRuntime.

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