Как отправить 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 или иным образом, добавить соответствующие атрибуты?

0 ответов

Другие вопросы по тегам