如何动态编译ashx文件?

3
我在一个asp.net的Web项目中有一个ashx文件,它有一个后台的cs文件。该cs文件被编译成项目dll并部署到生产环境。我发现没有办法在不部署整个项目dll的情况下动态更改cs文件。
我一直将c#代码放入aspx(而不是.cs)文件中,在部署后,我可以更改单个aspx文件,并进行部署。IIS可以动态编译并与其对应的c#代码合并。
那么,我能否用ashx文件做类似的事情呢?
以下是MSDN上的引用:http://msdn.microsoft.com/en-us/library/ms366723(v=vs.100).aspx
ASP.NET支持ASP.NET页面(.aspx文件)、ASP.NET Web服务(.asmx文件)、ASP.NET HTTP处理程序(.ashx文件)的动态编译。
谢谢你,这可以节省我很多时间!

1
你可能考虑切换到网站项目(而不是Web应用程序项目)。或者看看ASP.NET vNext,它是ASP.NET的下一个主要版本,将具有混合项目系统,结合了两者的最佳功能。 - mason
1
@user2055187 更新代码后台文件的原因是什么?为什么不想更新项目dll? - Win
1
@mason vNext 最多只是测试版,且还没有完整的功能,不建议用于生产环境。 - siva.k
1
@siva.k 我并不是在推荐它用于生产环境,我只是建议你了解一下。 - mason
2
感谢大家,更新项目 DLL 是我公司流程中的“正式”新版本发布。单个 ashx 文件部署则更加“轻量级”,这在我的控制范围内。 - Rm558
2个回答

5
我已经明白了。
  1. 在Visual Studio中添加一个通用处理程序-Handler1.ashx。
  2. 删除自动生成的cs文件。
  3. 再次打开ashx,
    • 删除CodeBehind="Handler1.ashx.cs"
    • 添加以下C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class Handler1 : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World2");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

应用我在这里学到的知识,可以查看此答案,其中包含我创建的完整工作示例,用于测试在ASP.NET Web应用程序中连接Oracle。 - DavidRR

0
<%@ WebHandler Language="VB" Class="FileVB1" %>

Imports System
Imports System.Web
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Public Class FileVB1 : Implements IHttpHandler
    
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim Slno As Integer = GlobalVariables.Slno
        Dim bytes As Byte()
        Dim fileName As String, contentType As String
        Dim constr As String = ConfigurationManager.ConnectionStrings("APMCUBIntranetConnectionString").ConnectionString
        Using con As New SqlConnection(constr)
            Using cmd As New SqlCommand()
                cmd.CommandText = "SELECT Slno,FileName, Valid FROM Manuals WHERE Slno=@Id"
                cmd.Parameters.AddWithValue("@Id", Slno)
                cmd.Connection = con
                con.Open()
                Using sdr As SqlDataReader = cmd.ExecuteReader()
                    sdr.Read()
                    Bytes = DirectCast(sdr("Valid"), Byte())
                    contentType = "application/pdf"
                    fileName = sdr("FileName").ToString()
                End Using
                con.Close()
            End Using
        End Using

        context.Response.Buffer = True
        context.Response.Charset = ""
        If context.Request.QueryString("download") = "1" Then
            context.Response.AppendHeader("Content-Disposition", Convert.ToString("attachment; filename=") & fileName)
        End If
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache)
        context.Response.ContentType = "application/pdf"
        context.Response.BinaryWrite(bytes)
        context.Response.Flush()
        context.Response.[End]()
    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
End Class











Please solve my problem i'm  getting error  at  (Bytes = DirectCast(sdr("Valid"), Byte()))

1
欢迎来到StackOverflow!您能描述一下您的答案,以便更多地了解您提出的解决方案的上下文吗?这将有助于原帖作者和未来的读者了解如何解决原帖作者的问题。谢谢! - interesting-name-here
虽然这段代码片段可能是解决方案,但包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您的代码建议原因。 - Shawn Hemelstrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接