WCF消息合同和流 [英] WCF Message Contract and Streaming

查看:100
本文介绍了WCF消息合同和流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要寄宿生疯了,我已经为此工作了整整一天,但仍然不知道为什么它不起作用,

I'm going boarder line crazy, I have been working with this for over a day and still have no idea why it doesn't work,

我有一个MessageContract用于发送流,但是出现以下错误,

I have a MessageContract that I'm using to send out a stream, but I get the following error,

使用数据键入"System.IO.FileStream" 合约名称 'FileStream: http://schemas.datacontract.org/2004/07/System.IO ' 不是预期的.不添加任何类型 静态已知到已知列表 类型-例如,通过使用 KnownTypeAttribute属性或按 将它们添加到已知类型列表中 传递给DataContractSerializer.

Type 'System.IO.FileStream' with data contract name 'FileStream:http://schemas.datacontract.org/2004/07/System.IO' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to 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;}
}

任何帮助都是非常合适的,

Any help is greatly appropriated,

推荐答案

FileStream对象指向文件系统,该文件系统无法从另一台计算机访问.

The FileStream object points to the filesystem, which cannot be accessed from another computer.

改用MemoryStream传输数据.您可以使用Stream.CopyTo(memoryStream)将数据复制到MemoryStream对象.

Use a MemoryStream instead to transfer the data. You can use Stream.CopyTo(memoryStream) to copy the data to the MemoryStream object.

这篇关于WCF消息合同和流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆