在从WCF生成的代理类中更改了引用类型
本文关键字:引用类型 代理 WCF 在从 | 更新日期: 2023-09-27 18:07:15
我知道这个标题有点令人困惑,所以这里是解释:
我正在尝试用WCF流式传输一个大文件,我有点知道怎么做。
当我写一个方法时说:
[OperationContract]
void sendStream(System.IO.Stream _StreamSource);
这样,在我的客户端应用程序中生成的代理类将正确地将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的流类型将在服务引用命名空间下。
。艾凡:MyServiceRef。流
这使得我无法将流传递给WCF。
但是对于string和int类型的东西,这不会发生
我想知道为什么,我通过流类型是已知的类型,如字符串和int?
或者有其他解决方法吗?
提前感谢!
KnownType
属性指示WCF向服务引用添加类型定义。这似乎还有一个副作用,即使DataContract中的任何KnownType属性都使用服务生成的类型。(这对于KnownType的正常使用是有意义的,因为WCF不知道该类型。)
您是否尝试在没有将Stream
声明为KnownType
的情况下使用合同?
流不像int或string那样可序列化。所以你不能把它们用作消息合约的属性。
但是,您可以在wcf: http://msdn.microsoft.com/en-us/library/ms731913.aspx中使用流,但这需要将流作为唯一参数。