SimpleWorkerRequest.SendResponseFromMemory.Байты, считанные из WebClient.DownloadData, не совпадают - PullRequest
1 голос
/ 17 января 2012

Я пытаюсь сериализовать объект и отправить его через Интернет. Я могу сериализовать и сразу десериализовать объект просто отлично. Однако, когда я пытаюсь отправить байты по HTTP, используя это на стороне сервера:

byte[] b = ObjectToByteArray(anObject);
SimpleWorkerRequest.SendResponseFromMemory(b, b.Length);

и затем использовать на стороне клиента:

WebClient client = new WebClient();
byte[] result = client.DownloadData(url);

результирующие байты не совпадают с отправленным байтом b. Я попытался изменить используемую кодировку, но она изменяет только байты, они никогда не совпадают. Я видел, что у WebClient есть поле кодирования, но это только для DownloadString. Какая кодировка используется для client.DownloadData? Как я могу гарантировать, что байты остаются прежними? Если есть альтернатива SimpleWorkerRequest, которая позволяет мне отправлять текст, это тоже было бы здорово ..

Edit: Если я сделаю проект ASP.NET и использую

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition",
                                 "attachment; filename=whatever.bin");

Это работает! Я попытался вернуться к SimpleWorkerRequest и добавить:

swr.SendKnownResponseHeader(System.Web.HttpWorkerRequest.HeaderContentType, "application/octet-stream");

Но я не уверен насчет другой части ... если я перехожу на страницу, она отображается как текст, а не как загрузка

...