Буферы протокола по HTTP GET с использованием WCF - PullRequest
3 голосов
/ 07 июля 2010

У меня есть служба 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=< / base64Binary>

Я также попытался десериализовать данные между тегами , но безрезультатно. Кто-нибудь знает, как мне следует отправлять двоичные данные protobuf-net из метода WebGet и как я должен десериализовать данные?1009 *

1 Ответ

2 голосов
/ 07 июля 2010

protobuf-net в основном обрабатывает только аспекты сериализации (спецификация Protobuf от Google не определяет дальше). Так что на самом деле все сводится к тому, как вы это сериализуете?

Я должен признать, что подход WCF GET - это не то, на что я обращал огромное внимание, поэтому здесь нет особой обработки. Один простой подход может заключаться в том, чтобы просто возвращать строку и обрабатывать кодировку base-64 самостоятельно, но, если честно , если вы выполняете HTTP GET, то WCF сам кажется излишним .

Я написал здесь об использовании ASP.NET MVC на сервере для protobuf через HTTP GET. Связанный пример кода также включает проводную совместимую реализацию ASP.NET.

Если есть что-то подходящее, что мы можем сделать, чтобы WCF GET стал легче, я весь в ушах ...

...