Вернуть сериализуемый объект из FileStream? - PullRequest
0 голосов
/ 30 декабря 2010

Я немного зелен, когда дело доходит до потоковой передачи и сериализации ... но я хочу сделать так, чтобы метод Upload на сервере возвращал сериализуемый объект клиенту (сейчас он недействителен).

У меня есть открытый класс ServiceResult, который я украшаю с помощью [Serializable], и ​​открытый класс FileTransferService, который реализует IFileTransferService

[ServiceContract()]
public interface IFileTransferService
{
    [OperationContract(IsOneWay = false)]
    string Upload(FileTransferRequest request);
}

Реализация делает свое дело, а затем в конце я создаю и сериализую объект и пытаюсь вернуть строку

return ServiceResultSerializer.SerializeAnObject(result);

На стороне клиента я вызываю эту услугу, используя этот класс

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IFileTransferService")]
public interface IFileTransferService
{

    // CODEGEN: Generating message contract since the wrapper name (FileTransferRequest) of message FileTransferRequest does not match the default value (Upload)
    [System.ServiceModel.OperationContractAttribute(IsOneWay = false, Action = "http://tempuri.org/IFileTransferService/Upload")]
    string Upload(FileTransferRequest request);
}

Я в основном беру этот проект, найденный в этом блоге: http://weblogs.asp.net/cibrax/archive/2007/08/29/sending-attachments-with-wcf.aspx

И попытка заставить его вернуть значение, которое клиентский клиент может использовать

Прямо сейчас я получаю сообщение об ошибке:

Операция «Загрузка» не может быть загружена, так как она имеет параметр или тип возврата типа System.ServiceModel.Channels.Message или тип, имеющий MessageContractAttribute и другие параметры различных типов. При использовании System.ServiceModel.Channels.Message или типов с MessageContractAttribute метод не должен использовать какие-либо другие типы параметров.

Что я понятия не имею, что это значит: P Я думаю, потому что я пытаюсь изменить параметры службы.

Извините, если я слишком общий - любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 30 декабря 2010

Мне кажется, что к вашему FileTransferRequest классу применено MessageContractAttribute.

Поскольку ваш входной параметр имеет MessageContractAttribute, ваш тип ответа также должен иметь MessageContractAttribute, что Stringне делает.Попробуйте создать класс FileTransferResponse, который имеет одно свойство строкового типа, и используйте его в качестве возвращаемого типа.

...