Problem while adding Web reference of an WCF service
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...
<bindings>
<basicHttpBinding>
<binding
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">
<security mode="None">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="SCORMPackageOperation.ServiceImplementation.SCORMFileOperation_Behavior">
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="SCORMPackageOperation.ServiceImplementation.SCORMFileOperation_Behavior"
name="SCORMPackageOperation.ServiceImplementation.SCORMFileOperation">
<endpoint binding="basicHttpBinding" bindingNamespace="http://SCORMPackageOperation.ServiceContracts/2009/07"
contract="SCORMPackageOperation.ServiceContracts.ISCORMFileOperation" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
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