Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Send Large File From Client To Server Using WCF?

How to Send Large File From Client To Server Using WCF in C#? Below the configuration code.

<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>
like image 305
Charan Avatar asked Oct 05 '09 11:10

Charan


2 Answers

You need to check out streaming, as Dzmitry already pointed out.

In order to be able to send large files as a stream to your service, you'll need to:

  • create a service method that accepts a Stream as its input parameter
  • create a binding configuration (on both the server and the client) which uses transferMode=StreamedRequest
  • create a stream in your client and send it to the service method

So first off, you need a method in your service contract:

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

Then you need a binding configuration:

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

and a service endpoint on your service using that binding configuration:

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

and then, in your client, you need to open e.g. a filestream and send that to the service method without closing it.

Hope that helps!

Marc

like image 162
marc_s Avatar answered Sep 25 '22 19:09

marc_s


You can take a look at WCF Streaming feature.

like image 42
Dzmitry Huba Avatar answered Sep 21 '22 19:09

Dzmitry Huba