Итак, я пытаюсь на сервер и перемещаю веб-сайт со старого сервера на новый.Он меняется с 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
Версия