3

バイト[]のprotobuf-netシリアル化データを返すWCFサービスがホストされています。元々、これはデフォルトのwebHttpBinding設定(SOAP)でホストされており、すべてが正しく機能していました。最近、クライアントから直接HTTP GETとPOSTを呼び出す必要があることがわかったので、RESTfulサービスを使用するように切り替える方が簡単だと思いました。WebGet属性とWCFRESTテンプレートを使用するように切り替えました。

クライアントをテストするための簡単なWebサイトを作成しようとしましたが、データの逆シリアル化に問題があります。これは、私がサービスを呼び出す方法の例です。

using (WebClient client = new WebClient())
{
    result = client.DownloadString(url);
}    
// Deserialize 
BinaryVehicles binVehs;
using (var ms = new MemoryStream(StrToByteArray(result)))
{
    binVehs = Serializer.Deserialize<BinaryVehicles>(ms);
}

「結果」で返されるものの例:<base64Binary xmlns = "http://schemas.microsoft.com/2003/10/Serialization/"> ChsKCzEyMy00NTYtNzg5EgU0NDAwMBoFQmxhY2sKHAoLOTYzLTg1Mi03NDESBTIzMDAwGgZTaWx2ZXI

また、<base64Binary>タグ間のデータを逆シリアル化しようとしましたが、結果はありませんでした。WebGetメソッドからバイナリprotobuf-netデータを送信する方法と、データを逆シリアル化する方法について誰かが考えていますか?ありがとう。

4

1 に答える 1

2

protobuf-netは、主にシリアル化の側面のみを処理します(Googleによるprotobuf仕様では、これ以上の定義はありません)。つまり、実際には、どのようにシリアル化するのでしょうか。

WCF GETアプローチは私が大々的に検討したものではないことを認めなければならないので、そこでは特別な処理はありません。簡単なアプローチの1つは、文字列を返すだけで、base-64エンコーディングを自分で処理することですが、正直に言うと、HTTP GETを実行している場合、WCF自体はやり過ぎのようです。

ここでは、HTTPGETを介したprotobuf用のサーバーでのASP.NETMVCの使用についてブログを書きました。リンクされたサンプルコードには、ワイヤー互換のASP.NET実装も含まれています。

WCF GETを簡単にするために私たちにできる適切なことがあれば、私はすべての耳です...

于 2010-07-07T09:44:36.087 に答える