Ограничения потоковой передачи с WCF - PullRequest
2 голосов
/ 23 мая 2011

Согласно следующему руководству на MSDN, любые операции, использующие потоковые передачи, могут иметь только один параметр ввода / вывода.

Ссылка: http://msdn.microsoft.com/en-us/library/ms731913.aspx (см. Заголовок "Ограничения на потоковые передачи ")

Я использую потоковые передачи для службы WCF, которая позволяет клиентам / потребителям загружать в нее файлы.Сама загрузка работает нормально, но мне нужен способ передать еще два входных параметра вместе с объектом Stream: 'string filename' и 'int userid'.

Как мне поступить так?

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

Существует нечто, называемое заголовками, которое вы можете использовать в вашем datacontract:

Пример интерфейса:

[ServiceContract]
public interface IFile
{
   [OperationContract]
   Stream DownloadFile(int fileid);

   [OperationContract]
   bool UploadFile(FileUploadMessage request);
}

Поместите это в отдельный файл:

[MessageContract]
public class FileUploadMessage
{
[MessageHeader(MustUnderstand = true)]
public int MyInt {get;set;

[MessageHeader(MustUnderstand = true)]
public string MyString {get;set;

[MessageBodyMember(Order = 1)]
public System.IO.Stream FileByteStream {get;set;}
}
0 голосов
/ 11 августа 2011

У меня несколько схожая проблема.Я создал тестовый проект и использовал найденную запись, чтобы успешно создать службу wcf, которая вызывает его из другого проекта.У меня есть решение и два веб-проекта.Один проект вызывает службу в другом проекте, используя ссылку на службу.У меня был ServiceContract и договор на сообщение в интерфейсном файле, сгенерированном путем создания службы wcf (файл, начинающийся с «I»).Все это работало нормально.Затем я пошел в основной проект нашей компании.У него есть основной веб-проект, в котором размещены два проекта Silverlight.Однако веб-проект на самом деле не является проектом, а начал свою жизнь как веб-сайт без какого-либо проекта.Я предположил, что добавление двух проектов silverlight на веб-сайт, вероятно, создало решение для всех трех проектов.Однако я не уверен, что vs2010 видит основной веб-сайт, который, как я предполагаю, не имеет указателей на какие-либо файлы, как это сделал бы «настоящий» проект.Случилось так, что когда я создал службу wcf на главном веб-сайте и поместил ServiceContract и MessageContract в файл интерфейса, я получил сообщение «интерфейсы не могут объявить типы» относительно MessageContract и его дочерних классов.Я пытаюсь последовать вашему совету в этом посте, взяв MessageContract и поместив его в другой файл, но я не уверен, какой тип файла.Я попытался поместить контракт Message в класс (файл cs).Однако ServiceContract ссылается на классы в MessageContract, и ServiceContract больше не видит классы в MessageContract, даже если они являются общедоступными.Какой тип файла я должен использовать, чтобы отделить контракт Message от ServiceContract?

Спасибо, Fig

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...