2010-08-12 11 views
3

我正在尝试创建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理解,我需要使用一个消息合同让我流的长度,但是当我从数据合同的消息合约切换我不再允许输入参数来传递。

我错过了配置更改吗?还是别的我可以试试?谢谢!

回答

2

您还必须为请求创建MessageContract。

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

然后定义你的操作如下:

[OperationContract] 
MyStream GetData(GetDataRequest request); 
+0

哇 - 多么简单!非常感谢。 – 2010-08-12 13:48:48

+0

问题是,如果您使用消息联系人进行响应,您还必须将其用于请求,反之亦然。 – 2010-08-12 13:55:31