WCF流服务,返回流长度并包含输入参数

时间:2010-08-12 13:25:03

标签: .net wcf

我正在尝试创建一个WCF流媒体服务。我有两个要求,我似乎在试图让它工作时遇到绊脚石:

  • 流大小的长度
  • 输入参数

我的留言合同如下:

[MessageContract]
public class MyStream
{
 [MessageHeader]
 public long StreamSize;

 [MessageBodyMember]
 public Stream StreamData;
}  

我的操作合同如下:

[ServiceContract]
public interface IStreamService
{
     [OperationContract]
     MyStream GetData(string data);
}

尝试使用Web服务时收到的错误消息是:

  

“GetData”操作不可能   因为它有一个参数或加载   返回类型的类型   System.ServiceModel.Channels.Message   或者有类型的   MessageContractAttribute等   不同类型的参数。什么时候   运用   System.ServiceModel.Channels.Message   或类型   MessageContractAttribute,方法   不得使用任何其他类型的   参数。

根据我对this post的理解,我需要使用消息合约来获取流的长度,但是当我从数据协定切换到消息合同时,我不再允许传入输入参数。

我是否缺少配置更改?或者别的什么我可以尝试?谢谢!

1 个答案:

答案 0 :(得分:2)

您还必须为请求创建MessageContract。

[MessageContract]
public class GetDataRequest
{
  [MessageBodyMember(Name="data")]
  public string Data { get; set; }
}

然后按如下方式定义您的操作:

[OperationContract]
MyStream GetData(GetDataRequest request);