Ограничения потоковой передачи с 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?
Спасибо фиг