Создание PDF-файлов из поля изображения на новом сервере

Итак, я пытаюсь подключиться к серверу и перемещаю веб-сайт со старого сервера на новый. Он меняется с 32-битной на 64-битную. Разработчик (которого здесь больше нет) закодировал веб-сайт для загрузки PDF-документов и сохранения их в поле изображения. Отлично работает, но не на новом сервере.

Следующий код — это страница, которая вызывается для отображения PDF-файла. Пример: TestMethod.aspx?id=75

<%@ Page language="c#" AutoEventWireup="true" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<%@ Import Namespace="System.Drawing" %> 
<%@ Import Namespace="System.Drawing.Imaging" %> 
<%@ Import Namespace="System.IO" %> 
<script runat="server"> 
void Page_Load(object sender, EventArgs e) 
{ 
    Response.ContentType = "application/pdf"; 
    Response.Buffer = true; 

    SqlCommand cmd = new SqlCommand("SELECT method FROM Tests WHERE id = @id"); 
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = Int32.Parse(Request["id"]); 
    Util.GetBLOB(cmd, Response.OutputStream, 32768); 

    Response.Flush(); 
    Response.End(); 
} 
</script>

Функция GetBLOB выглядит следующим образом:

public static void GetBLOB(SqlCommand cmd, Stream output, int bufferLength) 
{ 
    byte[] outbytes = new byte[bufferLength]; 

    SqlConnection connex = new SqlConnection(ConfigurationSettings.AppSettings["DSN"]); 
    cmd.Connection = connex; 
    connex.Open(); 

    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess); 
    rdr.Read(); 

    int start = 0; 
    long retval = rdr.GetBytes(0, 0, null, 0, 0); 

    retval = rdr.GetBytes(0, start, outbytes, 0, outbytes.Length); 
    while (retval > 0) 
    { 
            output.Write(outbytes, 0, (int)retval); 
            start += outbytes.Length; 
            retval = rdr.GetBytes(0, start, outbytes, 0, outbytes.Length); 
    } 

    retval = rdr.GetBytes(0, start, null, 0, 0); 
    outbytes = new byte[retval]; 
    rdr.GetBytes(0, start, outbytes, 0, outbytes.Length); 
    output.Write(outbytes, 0, (int)retval); 

    connex.Close(); 
}

Я очень новичок в ASP.NET и не вижу простого решения. Это как-то связано с тем, что сервер 64-битный? Спасибо за любую помощь.

Я получаю следующую ошибку при запуске:

Specified argument was out of the range of valid values.
Parameter name: offset 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: offset

Source Error: 

Line 14:    SqlCommand cmd = new SqlCommand("SELECT document FROM TechLibrary WHERE id = @id");
Line 15:    cmd.Parameters.Add("@id", SqlDbType.Int).Value = Int32.Parse(Request["id"]);
Line 16:    Util.GetBLOB(cmd, Response.OutputStream, 32768);
Line 17: 
Line 18:    Response.Flush();

Source File: d:\....\TechLibraryDoc.aspx    Line: 16 

Stack Trace: 

[ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: offset]
   System.Web.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 count) +169
   trace.Util.GetBLOB(SqlCommand cmd, Stream output, Int32 bufferLength) in c:\Inetpub\wwwroot\trace\src\Util.cs:146
   ASP.techlibrarydoc_aspx.Page_Load(Object sender, EventArgs e) in d:\.....\TechLibraryDoc.aspx:16
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2603

Версия


person user1003771    schedule 19.10.2011    source источник
comment
До сих пор не могу найти решение. Может ли это быть как-то связано с ContentType? Нужно ли мне что-то устанавливать, чтобы использовать application/pdf, или я использую что-то другое для 64-битного сервера с Windows Server 2008 и IIS7?   -  person user1003771    schedule 27.10.2011


Ответы (1)


Моя ошибка была очень похожа на вашу. оказалось, что приложение, которое мы использовали, было 32-битной dll, используемой на 64-битном сервере.

Пул приложений в IIS был настроен так, чтобы не запускать 32-разрядные DLL.

на мой взгляд, это, вероятно, связано с переключением 32-64 бит.

person KevinDeus    schedule 18.04.2012