我有一个托管的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数据以及如何反序列化数据?谢谢。
string
开始,编码成byte[]
,然后再转回string
。然而,反向操作的方式非常不同(因为二进制不是 ASCII 等):参见 http://marcgravell.blogspot.com/2010/03/binary-data-and-strings.html,该文指出要使用Convert.ToBase64String
和Convert.FromBase64String
。 - Marc Gravell