我知道标题有点令人困惑,所以这里有解释:
我正在尝试使用WCF流式传输大型文件,我知道该怎么做。
当我写一个方法时说:
[OperationContract]
void sendStream(System.IO.Stream _StreamSource);
在那里,生成的代理类在我的Client App中将System.IO.Stream类型正确地作为输入参数。
但如果我创建另一个类:
[MessageContract]
[KnownType(typeof(Stream))]
public class MyData
{
[MessageHeader(MustUnderstand = true)]
public string Key { get; set; }
[MessageBodyMember(Order = 1)]
public Stream Data { get; set; }
}
并拥有服务界面:
[OperationContract]
void sendStream(MyData _StreamSource);
我的客户端类中MyData的流类型将位于Service Reference命名空间下。
即:MyServiceRef.Stream
这使我无法将流传递给WCF。
但是对于string和int的东西不会发生这种情况。
我想知道为什么,我通过Stream类型已知类型如string和int?
或者有解决方法吗?
提前致谢!
答案 0 :(得分:1)
KnownType
属性指示WCF将类型定义添加到服务引用。看起来这也有副作用,即在DataContract中使KnownType的任何属性使用服务生成的类型。 (这对于KnownType的正常使用是有意义的,其中WCF不知道该类型。)
您是否尝试使用合约而未将Stream
声明为KnownType
?
答案 1 :(得分:1)
Stream不像int或string那样可序列化。因此,您不能将它们用作messagecontract的属性。
但是,您可以在wcf:http://msdn.microsoft.com/en-us/library/ms731913.aspx中使用流媒体,但这需要将流作为唯一参数。