2010-08-12 44 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