【发布时间】:2011-03-13 15:20:24
【问题描述】:
我快疯了,我已经用这个工作了一天多,仍然不知道为什么它不起作用,
我有一个用于发送流的 MessageContract,但出现以下错误,
键入带有数据的“System.IO.FileStream” 合同名称 '文件流:http://schemas.datacontract.org/2004/07/System.IO' 预计不会。添加任何类型不 静态已知到已知列表 类型 - 例如,通过使用 KnownTypeAttribute 属性或由 将它们添加到已知类型列表中 传递给 DataContractSerializer。
[ServiceContract()]
public interface IContentService
{
[OperationContract(), FaultContract(typeof(ContentFault))]
PublishItemResponse PublishFile(PublishFileRequest request);
}
[MessageContract()]
public class PublishFileRequest
{
[MessageHeader()]
public FileInventoryItem Item {get;set;}
[MessageHeader()]
public Request Request {get;set;}
[MessageBodyMember()]
public Stream FileContent {get;set;}
}
[MessageContract()]
public class Request
{
[MessageHeader()]
public Guid AuthorizationToken { get; set; }
[MessageHeader()]
public string CoreVersion { get; set; }
[MessageHeader()]
public string Password { get; set; }
[MessageHeader()]
public DateTime RequestTime { get; set; }
[MessageHeader()]
public string ComponentVersion { get; set; }
[MessageHeader()]
public string UserName { get; set; }
}
[MessageContract()]
[Serializable()]
public class FileInventoryItem : InventoryItemBase
{
public Stream FileContent { get; set;}
}
[MessageContract()]
[KnownType(typeof(FileInventoryItem))]
[KnownType(typeof(FolderInventoryItem))]
[Serializable()]
public abstract class InventoryItemBase
{
public List<string> Errors {get;set;}
public List<string> Warnings {get;set;}
[MessageHeader()]
public StagingAction Action {get;set;}
[MessageHeader()]
public string ContentXml {get;set;}
[MessageHeader()]
public int ItemId {get;set;}
[MessageHeader()]
public ItemType ItemType { {get;set;}
[MessageHeader()]
public string Name {get;set;}
[MessageHeader()]
public int ParentId {get;set;}
[MessageHeader()]
public Guid ParentUniqueId {get;set;}
[MessageHeader()]
public Guid UniqueId {get;set;}
[MessageHeader()]
public Guid Version {get;set;}
}
任何帮助都非常适合,
【问题讨论】:
-
错误提到
System.IO.FileStream。您的 ServiceContract 中没有 FileStream。为什么? -
[MessageBodyMember()] public Stream FileContent {get;set;} 传入的是从 Stream 继承的 File-stream。
-
从 Stream 继承。那就是问题所在。您是否尝试过仅发送一个纯 Stream 以查看它是否有效?
-
不能真正做到这一点,因为 Stream 是一种抽象类型
-
任何带有完整源代码示例的最终解决方案?
标签: c# .net wcf stream messagecontract