代码之家  ›  专栏  ›  技术社区  ›  Sean

通过HTTP GET使用WCF的协议缓冲区

  •  3
  • Sean  · 技术社区  · 14 年前

    我托管了一个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);
    }
    

    “result”中返回的示例: <base64binary xmlns=“http://schemas.microsoft.com/2003/10/serialization/”>chskczeymy00ntytnzg5egu0ndawmbofqmxhy2skhaolotzltg1mi03ndesbtizmdawgztawx2zxi=</base64binary>

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Marc Gravell    14 年前

    原布网 主要地 只处理序列化方面(Google的Protobuf规范没有进一步定义)。所以,归根结底就是:你是如何将它序列化的?

    我必须承认WCF GET方法并不是我非常关注的东西,所以这里没有特殊的处理方法。一种简单的方法可能是只返回一个字符串,并自己处理base-64编码,但是 老实说 如果你在做http-get,那么wcf 它本身 似乎是多余的。

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

    如果我们能做些适当的事情来让WCF变得更容易,我会全力以赴…