2011-07-23 4 views
2

何かを返す可能性がある場合、私はストリーミングを使用してWCFを通してデータを送信すると知りたいですか?私はnetTcpBindingを使用して、クライアントとサーバーは同じローカルネットワークにあります。ここでWCFのMessageContractを使用して値を返す方法は?

が私のコードです:

[ServiceContract()] 
public interface IFileTransferService 
{ 
    [OperationContract(IsOneWay = true)] 
    //[FaultContract(typeof(MyFaultException))] // I can't do that 
    void Upload(FileTransferRequest request); 
} 

[MessageContract()] 
public class FileTransferRequest 
{ 
    [MessageHeader(MustUnderstand = true)] 
    public string FileName; 

    [MessageBodyMember(Order = 1)] 
    public System.IO.Stream Data; 

} 

[DataContract] 
public class MyFaultException 
{ 
    private string _reason; 
    [DataMember] 
    public string Reason 
    { 
     get { return _reason; } 
     set { _reason = value; } 
    } 
} 

ので、メッセージ契約を使用した場合、トランザクションは一つの方法でなければならない、私は任意の値を返すことができない、私は例外をスローすることはできません。どのようにクライアントに、その操作が成功したかどうかを知らせますか?そして、彼にエラーメッセージを送りなさい?

+2

'OperationContract'を一方向として飾っているので、それは一方的でなければなりません。あなたの 'MessageContract'とは関係ありません。 – GalacticCowboy

答えて

3

したがって、メッセージ契約を使用する場合、トランザクションは一方向でなければならず、I は値を返すことはできません。例外をスローすることはできません。

このような情報はどこにありましたか?もちろん、値を返すことができます - voidまたは別のメッセージ契約を返すことができます。また、「取引」とは何ですか?

+2

私はそれが最も重要なポイントだと思います。リクエストでMessageContractを使用する場合、レスポンスオブジェクトもMessageContractでなければなりません。 – GalacticCowboy

+0

例えば "int"を返すことはできません。 int Upload(FileTransferRequest request);失敗するだろう トランザクションではなく "操作"を意味する申し訳ありません – Marshall

+2

単にMessageContractを作成してください。これはint型の 'MessageBodyMember'を単独で作成するだけで動作しますしかし、@ GalacticCowboyで述べたように、一方向に操作することはできません –

関連する問題