使用WCF的HTTP GET协议缓冲区传输协议

3
我有一个托管的WCF服务,返回一个protobuf-net序列化数据的byte[]。最初,它是通过默认的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);
}

"result"返回的示例:

< base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">ChsKCzEyMy00NTYtNzg5EgU0NDAwMBoFQmxhY2sKHAoLOTYzLTg1Mi03NDESBTIzMDAwGgZTaWx2ZXI=< /base64Binary>

我尝试对< base64Binary >标签之间的数据进行反序列化,但没有结果。是否有人知道我应该如何通过WebGet方法发送二进制protobuf-net数据以及如何反序列化数据?谢谢。

1个回答

2
protobuf-net主要处理序列化方面(Google的protobuf规范没有定义更多内容)。因此,问题实际上就是:你是如何进行序列化的?
我必须承认,WCF GET方法并不是我非常关注的内容,所以在这方面没有特别的处理。一个简单的方法可能是只返回一个字符串,并自己处理base-64编码,但说实话,如果你正在使用HTTP GET,则WCF本身似乎过于复杂。
我在这里发表了有关通过HTTP GET在服务器上使用ASP.NET MVC进行protobuf的博客。链接的示例代码还包括一个兼容线路的ASP.NET实现。
如果有适当的方法可以使WCF GET更容易,我会听取意见...

谢谢 Marc。我序列化protobuf-net数据后是否应对其进行编码,然后在接收端使用相同的编码解码它?我尝试使用以下简单方法快速完成此操作:http://www.chilkatsoft.com/faq/dotnetstrtobytes.html,但无法正确运行。当它尝试解码时,我遇到了ProtoBuf.ProtoException。如果您有任何提示,请告诉我。谢谢! - Sean
@Sean - 那篇文章描述了从 string 开始,编码成 byte[],然后再转回 string。然而,反向操作的方式非常不同(因为二进制不是 ASCII 等):参见 http://marcgravell.blogspot.com/2010/03/binary-data-and-strings.html,该文指出要使用 Convert.ToBase64StringConvert.FromBase64String - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接