Как отправить Protobufs через вызовы методов WCF?
Я написал и скомпилировал некоторые .proto
файлы, использующие среду выполнения protobuf-csharp-port, и я пытаюсь вернуть один из них в ответ на вызов метода WCF. Вот мой сервис:
[ServiceContract]
public interface IService
{
[OperationContract]
IEnumerable<Protobuf.LogEntry> GetLogItems();
}
Но это не помогает с бесполезным сообщением об ошибке "сервер не предоставил значимого ответа".
Ответы на другой вопрос позволили предположить, что это может быть взрыв сериализатора и отсутствие сообщения об ошибке, поэтому я попытался изменить контракт на string
:
[OperationContract]
IEnumerable<string> GetLogItems();
и это прекрасно работает, так что это должно быть что-то делать с Protobuf.
Я предполагаю, что WCF по какой-то причине не может сериализовать Protobuf. Я видел много людей, пишущих [DataContract]
но это кажется актуальным только для protobuf-net
, но я не мог найти какую-либо информацию о protobuf-csharp-port
, который, кажется, не использует [DataContract]
точно так же. Я пытался установить -code_contracts
вариант для Protogen для true
но это ничего не исправляет (это может даже не иметь отношения).
Итак: как я могу вернуть объект Protobuf из вызова метода WCF? Очевидно, я мог бы де / сериализовать Protobufs вручную, но это было бы утомительно, поэтому я хочу, чтобы WCF сделал это для меня.
Обратите внимание, что я не пытаюсь заменить сериализацию WCF на Protobuf; Я просто хочу вернуть объект Protobuf из вызова метода WCF.
Редактировать № 1: Я создал DataContractSerializer
вручную и попытался сериализовать Protobuf. Я получаю ошибку, которая говорит Type 'Protobuf.LogEntry' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMember attribute.
Я не могу этого сделать, поскольку код генерируется автоматически. Итак: как, используя ProtoGen или иным образом, добавить соответствующие атрибуты?