2016-03-16 2 views
0

У меня есть небольшой C# веб-приложение, которое считывает PDF хранится в виде данных BLOB в таблице SQL и служит его в браузере для пользователя:C# HttpResponse BinaryWrite PDF работает локально, а не на сервере

protected void Page_Load(object sender, EventArgs e) 
    { 

      byte[] data = GetData(Request.QueryString["companyNo"].ToString(), Request.QueryString["invoiceNo"].ToString()); 

      if (data != null) 
      { 
       Response.Buffer = true; 
       Response.ClearContent(); 
       Response.ClearHeaders(); 
       Response.ContentType = "application/pdf"; 
       Response.AddHeader("content-length", data.Length.ToString()); 
       Response.BinaryWrite(data); 
       Response.End(); 
      } 

Эта работа прекрасна локально, но когда я загружаю ее на свой тестовый сервер, я ничего не получаю.

Я захватил трафик и вижу локально, когда вы вызываете URL-адрес, он выполняет HTTP POST, но на веб-сервере выполняет GET и ничего не возвращает.

локальный запрос заголовка

Запрос POST/aff86f6621ed44b2910d856a19d0c8d1/browserLinkSignalR/прервать? Транспортного = longPolling & connectionToken = AQAAANCMnd8BFdERjHoAwE% 2FCl% 2BsBAAAAdyAqdSoaME6giXw9SxAo3gAAAAACAAAAAAADZgAAwAAAABAAAABjumookEDHXn5Jz9JxDPjJAAAAAASAAACgAAAAEAAAAEzCAsIk2T% 2Fm7voBY1V% 2BeyooAAAAfF2pmaJ8A2WzK5JOx8QqKzYRYxFjyclkE3paKmoOPCXkIniBsjOhpxQAAAC8VGgsefZk5zRmUdh58GRu6xYAWQ% 3D% 3D & requestUrl = HTTP% 3A% 2F% 2Flocalhost% 3A64169% 2FDefault.aspx & browserName = Internet + Explorer & userAgent = Mozilla% 2F5

Принять текстовые/простые, /; q = 0,01

Приложение типа контента/x-www-form-urlencoded; кодировка = UTF-8

Referer http://localhost:64169/Default.aspx

Accept-Language ен-GB

Accept-Encoding GZIP, выкачать

User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7,0; XS-cc6DYWKA8sA; rB12Ke; с.в.: 11,0), как Gecko

Хост локальный: 65187

Content-Length: 0

DNT 1 Connection Keep-Alive Cache-Control не-кэш

Запрос сервера Заголовок

Запрос GET /MyApp/Default.aspx?companyNo=50222 & InvoiceNo = 50497557 HTTP/1.1

Принять изображение/JPEG, применение/X-MS-приложений, изображений/GIF, приложение/XAML + XML, образ/pjpeg, применение/X-MS-XBAP, /

Подтвердить язык ru-RU

User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6,0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)

Accept-Encoding GZIP, выкачать

Хост TestServer

Connection Keep-Alive

Я звоню тот же URL каждый раз (за исключением "TestServer" вместо " . локальный»есть некоторые конфигурации я пропускаю

+1

Поскольку ваш ответ показывает Content-Length 0, кажется, что функция GetData не возвращает никакого байта. Укажите точку отладки if (data! = Null) и проверьте значение для данных. – Mitesh

ответ

0

Я думаю, вам нужно добавить этот заголовок:

fileName = "testFile"; 
    response.AddHeader("Content-Disposition", 
            string.Format("{0};FileName=\"{1}\"", 
               "attachment", 
               fileName)); 
+0

Ive пробовал это до того, как вошел в Google, и просто попробовал еще раз, чтобы убедиться, но без радости. То же самое :( – Nick

+0

Что он имеет эти параметры локально и на сервере? Request.QueryString ["companyNo"]. ToString(), Request.QueryString ["invoiceNo"]. ToString() – raven

+0

Можете ли вы добавить строку отладки для печати data.length? – raven

0

Нашел, что проблема: я добавил журнал, чтобы отметить определенные события в цепочке приложения согласно Robeto & Предложение Miteh, которое позволило мне увидеть, что функция, получающая данные, падает и не возвращает никаких данных из-за отсутствия о кредитах на тестовом поле. Отсортировано это и данные вернутся как ожидалось сейчас.

Спасибо и за вашу поддержку!

Смежные вопросы