Hello,

      I have written a WCF streamed service for uploading large files. In the service Interface I am taking  "stream" as the parameter. The service part of the code is compiling well. When I include this service(Adding Web reference) in the client the same parameter is becoming byte[] and is not taking the FileStream which is supposed to be given to the service which pulls the data from this FileStream. I checked the Reference.cs file on the client side and changed all instances of byte[] to Stream. The code compiles but when run gives exception. Please suggest me how to overcome this problem. Thanks in advance.

My Service Web.config looks like this...


         
                name="FileTransferServicesBinding"
    closeTimeout="00:01:00"
    openTimeout="00:01:00"
    receiveTimeout="00:10:00"
    sendTimeout="00:01:00"
    transferMode="Streamed"
    messageEncoding="Mtom"
    maxBufferSize="65536"
    maxReceivedMessageSize="67108864">
           
               
           

           
         

     



     
  
   
    
    
   

  

 

 
       name="SCORMPackageOperation.ServiceImplementation.SCORMFileOperation">
         contract="SCORMPackageOperation.ServiceContracts.ISCORMFileOperation" />
   
  

 

 


My Message contract is like this...

 private Stream inPutField;

        [MessageBodyMember(Order = 0)]
        public Stream inPut
        {
            get { return inPutField; }
            set { inPutField = value; }
        }

My Service Contract is like this....

[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = true, AsyncPattern = false, Action = "SCORMData")]
        void SCORMData(Stream inPut);


Please suggest me what changes I need to do. My service Implementation is...

public void SCORMData(Stream inPut)
        {
            FileStream targetStream = null;
            Stream sourceStream = inPut;

            string uploadFolder = @"C:\S3File\temp\";
          
            string filename = "testSCORMFile";
            string filePath = Path.Combine(uploadFolder, filename);

            using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                //read from the input stream in 4K chunks
                //and save to output stream
                const int bufferLen = 4096;
                byte[] buffer = new byte[bufferLen];

                int count = 0;
                long bytesRead = 0;
                while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
                {
                    targetStream.Write(buffer, 0, count);
                    bytesRead += count;
                }

                targetStream.Close();
                sourceStream.Close();
           
                return;
            }
       
        }

Regards,
Excel