King Chan
King Chan

Reputation: 4302

Reference type is changed in proxy class that generated from WCF

I know the title is little confusing, so here is the explaination:

I am trying to streaming a large file with WCF and I kind of know how to do it.

When I wrote a method say:

    [OperationContract]
    void sendStream(System.IO.Stream _StreamSource);

There, the generated proxy class insides my Client App will have the System.IO.Stream type as input parameter correctly.

But if I create another class:

[MessageContract]
[KnownType(typeof(Stream))]
public class MyData
{
    [MessageHeader(MustUnderstand = true)]
    public string Key { get; set; }
    [MessageBodyMember(Order = 1)]
    public Stream Data { get; set; }
}

And have the service interface:

    [OperationContract]
    void sendStream(MyData _StreamSource);

The stream type from MyData in my client class will be under Service Reference namespace.

i.e: MyServiceRef.Stream

Which made me cannot pass the stream to WCF.

But this doesn't happen for string and int stuff.

I wonder why, I throught Stream type is known type like string and int?

Or is there any workaround?

Thanks in advance!

Upvotes: 1

Views: 636

Answers (2)

Steve B
Steve B

Reputation: 37660

Stream is not serializable like int or string. So you can't use them as a property of a messagecontract.

You can, however, use streaming in wcf : http://msdn.microsoft.com/en-us/library/ms731913.aspx, but this require to have the stream as the unique parameter.

Upvotes: 1

Gideon Engelberth
Gideon Engelberth

Reputation: 6155

The KnownType attribute instructs WCF to add type definitions to the service reference. It appears that this also has the side effect of making any properties of a KnownType inside the DataContract to use the service-generated type. (This makes sense for the normal usage of KnownType, where WCF does not otherwise know about the type.)

Did you try using the contract without declaring Stream as a KnownType?

Upvotes: 1

Related Questions