2009-07-27 17 views
2

私はProtobuf-netのRPC機能を使用してWCF Webサービスを使用しようとしています。ここに私のサービス契約です:Protobuf-net NET CFクライアントでWCFサービスを使用するには?

namespace WcfEchoService 
{ 
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config. 
    [ServiceContract] 
    public interface IEchoService 
    { 

     [OperationContract, ProtoBehavior] 
     string Echo(string value); 

     [OperationContract, ProtoBehavior] 
     string EchoNull(); 

     [OperationContract, ProtoBehavior] 
     CompositeType[] EchoData(CompositeType[] value); 
    } 


    // Use a data contract as illustrated in the sample below to add composite types to service operations. 
    [DataContract] 
    [ProtoContract] 
    public class CompositeType 
    { 


     [ProtoMember(1)] 
     public bool BoolValue 
     { 
      get; 
      set; 
     } 
     [ProtoMember(2)] 
     public string StringValue 
     { 
      get; 
      set; 
     } 
    } 
} 

そして、ちょうど下にされて私の.NET CFクライアント:

クラスEchoServiceClient:ProtoClient、IEchoService {

#region IEchoService Members 

    public EchoServiceClient() : base(new HttpBasicTransport("my service URI")) 
    { 

    } 

    public string Echo(string value) 
    { 
     return (string)this.Invoke("Echo", value); 
    } 

    public string EchoNull() 
    { 
     return (string)this.Invoke("EchoNull"); 
    } 

    public CompositeType[] EchoData(CompositeType[] value) 
    { 
     return (CompositeType[])this.Invoke("EchoData", value); 
    } 

    #endregion 
} 

そして、これは私が消費しようとする方法です。 Webサービス:

class Program 
{ 
    static void Main(string[] args) 
    { 
     EchoServiceClient client = new EchoServiceClient(); 
     Console.WriteLine(client.EchoNull()); 
    } 
} 

私はtメッセージに続くメッセージ:

AllowWriteStreamBufferingが無効のときに書き込み操作を実行するには、ContentLengthを負でない数値に設定するか、SendChunkedをtrueに設定する必要があります。

は限り私がいるProtobufネットのソースコードに掘った後、言うことができるように問題が指定されていないコンテンツ-な長さがないことのようです。 .NET CFでprotobuf-netシリアル化を使用してWCF Webサービスを使用する方法や、この問題を解決する方法はありますか?

マーク:

答えて

0

編集:私は質問を誤読しました。短いバージョン:ProtoClient!= WCF。彼らは互換性がありません。


コンパクトフレームワークでは、WCFスタックに必要な拡張ポイントがすべて不足しています。要するに、このアプローチをWCF + CFで使用することはできません。

でも、私はCF、といるProtobufネットのための各種作業のアプローチの認識しています。

  • あなたのサービスがbyte[]または(より良い)を返していStream、手動でそれを扱います。いいえ、それはきれいではありませんが、動作します
  • protobuf-netに含まれている代替RPCスタックを試すことができます。

代替スタックがProtoClient<T>であり、私は(私の記憶が失敗した私も、チェックする必要があると思います)これはCFにうまくいくと思う。私は正直なところ、CF上で動作するかどうかを思い出すことができず、私は現時点で確認する立場にはありません。それはCF上仕事、私はそれをコンパイルするために取得するre-implement Expressionを有する覚えて...(2.0スタイルおよび3.5スタイルの両方のための)いくつかの使用例がhereている必要があります。

+0

ご返信ありがとうございます。私は試してみて、そのRPCスタックから何ができるのか見てみましょう。 –

+0

これにはWP7が含まれていますか? –

+0

@リチャード - v2のコア*を入手する以外にWP7を見る時間はあまりありませんでした(v2はソースとして利用できますが、リリースされていません)。それ以外にも、 'byte [] 'トリックは確実に機能し、シンプルさの利点があります。今週の早い段階で、Silverlightに以前は見つからなかった拡張ポイントがいくつか追加されていますが、WP7が含まれているかどうかは分かりません。悲しいかな、私のうちの1つだけ... –

関連する問題