我正在开发一个Wcf Restful Service,其中包含数据合同“User”,如下所示
[DataContract]
public class User
{
public User()
{
}
[DataMember(Name = "Name")]
public string Name { get; set; }
[DataMember(Name = "Mobile")]
public string Mobile { get; set; }
[DataMember(Name = "Email")]
public string Email { get; set; }
[DataMember(Name = "IsImageUpdated")]
public bool IsImageUpdated { get; set; }
}
现在我想添加一个Image类型的模式数据成员,当我尝试使用Stream类型添加Image时显示异常
[DataMember(Name = "Iamge")]
public Stream Image { get; set; }
“InnerException消息是'Type'Cystem.IO.FileStream',数据协定名称为'FileStream:http://schemas.datacontract.org/2004/07/System.IO'不是预期的。请考虑使用DataContractResolver或将任何静态未知的类型添加到已知列表中types - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表。'。有关更多详细信息,请参阅InnerException。“
我正在开发的服务有很多数据合同,我读了一些帖子说可以通过将Datacontract更改为消息合同来解决问题,服务是否支持不同的合同类型(如数据,消息)。
我需要一个解决方案。
答案 0 :(得分:1)
使用WebHttpBinding时无法实现。 仅当绑定具有SOAP消息格式并且使用MessageContract而不是DataContract时,才能组合流式和缓冲内容。
支持使用byte []或直接返回流。
[DataMember(Name = "Iamge")]
public byte[] Image { get; set; }
或
[OperationContract]
[WebGet(UriTemplate = "/Image")]
Stream GetImage();
或使用NetTcpBinding,WsHttpBinding,BasicHttpBinding,......
[MessageContract]
public class ImageData
{
[MessageBodyMember]
public Stream Image { get; set; }
[MessageHeader]
public string Name { get; set; }
}