Ограничения потоковой передачи с WCF

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

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

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

Как бы я поступил так?

2 ответа

Решение

Есть что-то, что называется заголовками, которые вы можете использовать в вашем 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;}
}

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

Спасибо фиг

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