【问题标题】:Protocol Buffers over HTTP GET using WCF使用 WCF 的 HTTP GET 上的协议缓冲区
【发布时间】:2010-07-07 03:11:59
【问题描述】:

我有一个 WCF 服务托管,它返回一个字节 [] 的 protobuf-net 序列化数据。最初这是通过默认的 webHttpBinding 设置 (SOAP) 托管的,并且一切正常。我最近发现我需要直接从我们的客户端调用 HTTP GET 和 POST,所以我认为切换到使用 RESTful 服务会更容易。我切换到使用 WebGet 属性和 WCF REST 模板。

我尝试创建一个简单的网站来测试客户端,但在反序列化数据时遇到了问题。这是我如何调用服务的示例:

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

“结果”中返回的示例: ChsKCzEyMy00NTYtNzg5EgU0NDAwMBoFQmxhY2sKHAoLOTYzLTg1Mi03NDESBTIzMDAwGgZTaWx2ZXI=

我还尝试反序列化 标记之间的数据,但没有结果。有谁知道我应该如何从 WebGet 方法发送二进制 protobuf-net 数据以及我应该如何反序列化数据?谢谢。

【问题讨论】:

    标签: c# wcf protobuf-net


    【解决方案1】:

    protobuf-net 主要只处理序列化方面(Google 的 protobuf 规范没有进一步定义)。所以它真的归结为:你是如何序列化它的?

    我必须承认 WCF GET 方法不是我看过的东西,所以那里没有特殊处理。一种简单的方法可能是只查看返回一个字符串,然后自己处理 base-64 编码,但老实说如果你正在做 HTTP GET,那么 WCF 本身似乎有点矫枉过正。

    blogged here 关于通过 HTTP GET 在服务器上使用 ASP.NET MVC 来获取 protobuf。链接的示例代码还包括与线路兼容的 ASP.NET 实现。

    如果我们可以做一些适当的事情来使 WCF GET 更容易,我会全力以赴...

    【讨论】:

    • 谢谢马克。我是否应该在序列化 protobuf-net 数据后对其进行编码,然后在接收端使用相同的编码和反序列化它?很快,我尝试使用这些简单的方法来做到这一点:chilkatsoft.com/faq/dotnetstrtobytes.html 并且无法使其正常工作。当它试图反序列化它时,我得到了一个 ProtoBuf.ProtoException。如果您有任何提示,请告诉我。谢谢!
    • @Sean - 那篇文章描述了从string 开始,编码 byte[],然后回到string。但是,在 other 方向上的工作方式非常不同(因为二进制文件是 not ASCII 等):请参阅 marcgravell.blogspot.com/2010/03/binary-data-and-strings.html,其中注意使用 Convert.ToBase64StringConvert.FromBase64String .
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2011-10-27
    • 2014-01-16
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多