Добавление сети protobuf -в мой сервис WCF Rest

Существует ли какой-либо канонический прямой способ включения сетевой сериализации protobuf -в.NET 4 WCF? Я попытался упростить код до такой степени, чтобы его можно было легко использовать :

. Вот мой сервисный код:

[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MobileServiceV2
{
    [WebGet(UriTemplate = "/some-data")]
    [Description("returns test data")]
    public MyResponse GetSomeData()
    {
        return new MyResponse { SomeData = "Test string here" };
    }
}

[DataContract]
public class MyResponse
{
    [DataMember(Order = 1)] 
    public string SomeData { get; set; }
}

Я активирую этот сервисный маршрут вApplication_OnStart(Global.asax )вот так:

RouteTable.Routes.Add(new ServiceRoute("mobile", new MyServiceHostFactory(), typeof(MobileServiceV2)));

Я использую MyServiceHostFactoryдля управления службами с помощью MEF, но это не имеет значения.

Конфигурация моей службы по умолчанию, единственный дополнительный материал в Web.Config здесь:

    
    
    
      
        
          
        
      
    
  

Хорошо, сервис жив и работает. Есть мобильная/помощь, я могу выполнить GET для мобильных/некоторых -данных и получить ответ как в XML, так и в JSON

application/xml возвращает XML, application/json возвращает JSON

Что мне нужно сделать, чтобы клиенты могли установить protobufs application/x -и получить свой ответ, закодированный с помощью protobuf -net?

Целый день читаю и все больше путаюсь...

Вот что я нашел до сих пор, и, похоже, ничто не дает прямого решения:

  1. http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/

  2. http://weblogs.thinktecture.com/cweyer/2010/12/using-jsonnet-as-a-default-serializer-in-wcf-httpwebrest-vnext.html

Вторая ссылка вроде то, что мне нужно, но она не работает для меня. Не знаю почему, но я не могу понять, в каком пространстве имен MediaTypeProcessorживет, и просто не могу заставить его работать в.NET4?

Различные разрозненные сведения о настройке protobuf -net через web.config выдают разные ошибки, и я просто не уверен, что мне нужно идти по этому пути. Я бы предпочел только решение с кодом -.

РЕДАКТИРОВАТЬ:

Из того, что я исследовал -, мой плохой MediaFormatterкажется, что НЕТ в текущей версии WCF. Интересно, будет ли лучше создать отдельный URL для всех клиентов protobuf? Таким образом, я могу получать поток и возвращать поток. Обработайте всю логику сериализации вручную. Немного больше работы, но я буду лучше контролировать фактические данные.

5
задан katit 20 July 2012 в 15:08
поделиться