在从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?

或者有其他解决方法吗?

提前感谢!

在从WCF生成的代理类中更改了引用类型

KnownType属性指示WCF向服务引用添加类型定义。这似乎还有一个副作用,即使DataContract中的任何KnownType属性都使用服务生成的类型。(这对于KnownType的正常使用是有意义的,因为WCF不知道该类型。)

您是否尝试在没有将Stream声明为KnownType的情况下使用合同?

流不像int或string那样可序列化。所以你不能把它们用作消息合约的属性。

但是,您可以在wcf: http://msdn.microsoft.com/en-us/library/ms731913.aspx中使用流,但这需要将流作为唯一参数。