У меня есть служба WCF, и я ищу поток файлов с сервера на клиент.
У меня это работало, когда я жестко кодировал имя файла файла для потоковой передачи в код.
Я пытаюсь изменить код, чтобы метод getStream возвращал словарь, чтобы я мог вернуть коллекцию имен файлов и поток, связанный с именем файла, а затем обработать каждый поток на стороне клиента.
Я получаю следующее исключение на стороне клиента при попытке вызвать метод getStream:
Произошла ошибка при получении ответа HTTP на http://localhost:8082/. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы). Подробнее смотрите в журналах сервера.
После исследования этого в сети это выглядит как ложное исключение, поэтому я включил трассировку, и это сообщение об исключении из журнала трассировки:
Произошла ошибка при попытке сериализации параметра http://tempuri.org/:GetStreamResult. Сообщение InnerException было "Тип" System.IO.FileStream "с именем контракта данных" FileStream: http://schemas.datacontract.org/2004/07/System.IO' не ожидается. Рассмотрите возможность использования DataContractResolver или добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных в DataContractSerializer. '. Пожалуйста, смотрите InnerException для более подробной информации.
Вот код на стороне сервера:
public Dictionary<String, Stream> GetStream()
{
Dictionary<String, Stream> retDic = new Dictionary<string, Stream>();
string[] fileEntries = Directory.GetFiles(@"C:\Users\Ash\Desktop\FrontendPluginsServer");
foreach (string fileName in fileEntries)
{
//do something with fileName
retDic.Add(fileName, File.OpenRead(fileName));
}
//return File.OpenRead(@"C:\Users\Ash\Desktop\FrontendPluginsServer\OptekImporterFrontend.dll");
return retDic;
}
Вот код на стороне клиента:
ModuleDownloader.ModuleDownloaderClient moo = new ModuleDownloader.ModuleDownloaderClient();
Dictionary<String, Stream> dic = moo.GetStream();
foreach (String key in dic.Keys)
{
using (Stream file = File.OpenWrite(@"C:\Users\Ash\Desktop\FrontEndPluginsClient\" + key)) { CopyStream(dic[key], file); }
}
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
С уважением
Ash