В WCF службы я заполнить поток согласно this question как:Множественный поток в одном потоке не будет передан клиенту правильно
result.Stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(result.Stream);
foreach (string fileN in zipFiles)
{
byte[] fileBytes = File.ReadAllBytes(fileN);
writer.Write(BitConverter.GetBytes(fileBytes.Length), 0, 4);
writer.Write(fileBytes, 0, fileBytes.Length);
}
writer.Flush();
return result;
до этого я возвращался поток, это и все работает в сфере услуг и на стороне клиента:
result.Stream = new MemoryStream(File.ReadAllBytes(fileN));
поток будет MessageBodyMember
но гайка Теперь изменили его, чтобы сохранить все файлы в одном потоке. Метод
и тест на стороне клиента:
ExportClient export = new ExportClient("exportEndPoint");
ExportResult_C result = export.Export(source);
result.Stream.Position = 0;
//result.Stream.SaveToFile("d:\\kkk.log");
BinaryReader reader = new BinaryReader(result.Stream, System.Text.Encoding.UTF8);
string pathToSave = string.Empty;
while (result.Stream.Position < result.Stream.Length)
{
int size = reader.ReadInt32();
byte[] data = reader.ReadBytes(size);
pathToSave = "D:\\test\\" + new Random().Next(0, 2564586).ToString() + ".zip";
File.WriteAllBytes(pathToSave, data);
}
конечная точка адрес:
<endpoint address="net.tcp://localhost:2082/Exchange/Export.svc" binding="netTcpBinding" bindingConfiguration="largeSizeStreamTcp"
contract="xxx" name="exportEndPoint"/>
и связывание конфигурации:
<netTcpBinding>
<binding openTimeout="00:00:03" maxReceivedMessageSize="2000000000" transferMode="Streamed" maxBufferSize="2000000000" >
<readerQuotas maxDepth="32" maxArrayLength="2000000000" maxStringContentLength="2000000000" />
<security mode="None" />
</binding>
<binding name="largeSizeStreamTcp" transferMode="Streamed" receiveTimeout="00:30:00" sendTimeout="00:30:00" openTimeout="00:00:01" maxReceivedMessageSize="2000000000" maxBufferSize="2000000000" >
<readerQuotas maxDepth="32" maxArrayLength="2000000000" maxStringContentLength="2000000000" />
<security mode="None" />
</binding>
</netTcpBinding>
<netNamedPipeBinding>
Я считаю, что конечная точка и обязательным является правильным, как я способный вернуть один поток файлов и сохранить его обратно, но теперь нет никакой проблемы со службой поддержки, но w и он будет получать с клиентской стороны, Stream потерял его содержание, длину, положение.
это действительно подталкивает меня к стене !!!
Кто-нибудь знает, почему это произошло (на стороне клиента)?
Я думаю, что привязка плохо или служба связана со связыванием.Убедитесь, что служба получает поток. Клиент отправляет или принимает данные? Похоже, что проводка кода получает поток. Сервер отправляет поток? Я не вижу номеров портов, поэтому порт может быть заблокирован. Используйте номер порта> 10 000, чтобы он не конфликтует с другим приложением и не блокируется. Порты менее 1024 могут блокироваться. – jdweng
Нет, как я уже сказал, я возвращал файловый пар, например, новый MemoryStream (File.ReadAllBytes (fileN)), однако теперь он может возвращать поток до кода снова, он возвращается на клиентскую сторону и сохраняет его обратно (много времени проверяется), номер порта и адрес конечной точки правильно настроены. – Aria
Если TCP настроен правильно, вы можете отправлять данные без привязок? Это проблема только с привязками? Можете ли вы ping LocalHost в cmd.exe? Не все компьютеры настроены на LocalHost. На одном ПК клиент и сервер не могут одновременно использовать localhost. Обычно сервер использует IP.Any. – jdweng