Существует ли какой-либо канонический прямой способ включения сетевой сериализации 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?
Целый день читаю и все больше путаюсь...
Вот что я нашел до сих пор, и, похоже, ничто не дает прямого решения:
Вторая ссылка вроде то, что мне нужно, но она не работает для меня. Не знаю почему, но я не могу понять, в каком пространстве имен MediaTypeProcessor
живет, и просто не могу заставить его работать в.NET4?
Различные разрозненные сведения о настройке protobuf -net через web.config выдают разные ошибки, и я просто не уверен, что мне нужно идти по этому пути. Я бы предпочел только решение с кодом -.
РЕДАКТИРОВАТЬ:
Из того, что я исследовал -, мой плохой MediaFormatter
кажется, что НЕТ в текущей версии WCF. Интересно, будет ли лучше создать отдельный URL для всех клиентов protobuf? Таким образом, я могу получать поток и возвращать поток. Обработайте всю логику сериализации вручную. Немного больше работы, но я буду лучше контролировать фактические данные.