Tag: httphandler

异步HttpHandlers和WriteAsync

我一直在Ayende Rahien的博客上试验一些代码,这些代码使用异步HttpHandler来改进可以同时处理的请求数量。 不幸的是,我甚至可以得到基本的例子。 我收到以下错误: ‘System.IO.TextWriter’不包含’WriteAsync’的定义,并且没有可以找到接受类型’System.IO.TextWriter’的第一个参数的扩展方法’WriteAsync’(您是否缺少using指令或程序集引用?) 为线。 return context.Response.Output.WriteAsync(“Hello World!”); 我想这个方法是net4中添加的扩展方法,作为Parallel Extensions的一部分,但是对于我的生活,我可以找到正确的命名空间。 Wouls你们任何一个铁杆csharpers请揭开光明。

Http-handler加载错误

我在Asp.Net WebApplication中成功添加并配置了HttpHandler,但在尝试将相同的HttpHandler添加到Asp.Net WebSite时遇到了问题。 我已经在web.config中注册了它,我错过了什么 这是我得到的错误 Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser Error Message: Could not load type ‘MyHandler’. Line 98: Line 99: Line 100: Line 101: 这是处理程序 public class […]

C#,调试HTTPHandler

我有一个HTTP处理程序,它是我们应用程序90%的入口点。 基本上它获取请求,处理大量数据并返回一个非常具体的文件,具体取决于它所嵌入的客户端和网页等。我已经设置了应用程序映射,以便所有.kab扩展指向C:\ Windows。 .. \ aspnet_isapi.dll 。 我将我的HttpHandler DLL添加到我的网站的BIN目录中。 当我尝试浏览测试页面时,iFrame会显示404. 我在设置HttpHandler时是否遗漏了一些内容? 至于调试我的代码,我已尝试附加,但我一直在页面上收到404错误,它从不进入我的代码。 在调试模式下绑定项目的最佳实践方法是什么? 测试的基本设置(一台机器上的所有本地): Windows XP Pro上的IIS 5.1 – 运行简单的default default.aspx: VS2005以附加模式运行到INETINFO.EXE进程。

用户会话ID作为Ajax调用中的参数

我已经创建了一个HttpHandler ,我将使用jquery-Ajax调用。 这个HttpHandler将访问数据库并检查与当前被烧毁的用户相关的内容 。 通过使用Session,使用名为user_id的属性将用户视为已登录。 Session[“user_id”] = userId; 我试图在HttpHandler中检索这个Session ,但这似乎不起作用。 所以我考虑将user_id作为参数发送。 var user_id = //Retrieved in some way… $.ajax({ url: ‘QuestionRate.ashx?id=user_id’, success: function (msg, status, xhr) { alert(msg); }, error: function () { alert(msg); } }); 但这看起来似乎是一个坏主意,任何阅读代码的人都可以使用他想要的id访问Handler。 那么在这种情况下我该怎么办? 我希望Handler获取user_id以进行数据库访问,但我想确保此user_id是已登录用户的实际ID。 无法访问处理程序中的会话?

使用HttpHandlerFactory呈现CMS和物理页面

我正在编写CMS系统,在阅读并完成一些示例后,我已经确定了HttpHandlerFactory以执行我需要的操作。 关键点是我们的网站通常是复制和注册流程的混合。 因此,我目前需要使用aspx的默认HttpHandler来呈现物理注册页面,直到我可以使用内容管理它们的方式。 在创建处理程序类之后,我将以下内容添加到我网站的Web配置中 由于上面的路径处理物理和cms驱动的页面,通过对代码的小检查,我能够看到页面是否物理存在,然后可以呈现所需的页面。 public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) { string pageName = Path.GetFileNameWithoutExtension(context.Request.PhysicalPath); context.Items.Add(“PageName”, pageName); //DirectoryInfo di = new DirectoryInfo(context.Request.MapPath(context.Request.ApplicationPath)); FileInfo fi = new FileInfo(context.Request.MapPath(context.Request.CurrentExecutionFilePath)); //var file = fi.Where(x => string.Equals(x.Name, string.Concat(pageName, “.aspx”), StringComparison.InvariantCultureIgnoreCase)).SingleOrDefault(); if (fi.Exists == false) { // think I had this the wrong way around, […]

在HttpHandler中通过Windows API生成图像的Thumnail

我使用下面的代码在ASP.Net应用程序中创建一个Image的缩略图。 using System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Text; namespace RMA.Shell { public class ShellThumbnail : IDisposable { [Flags] private enum ESTRRET { STRRET_WSTR = 0, STRRET_OFFSET = 1, STRRET_CSTR = 2 } [Flags] private enum ESHCONTF { SHCONTF_FOLDERS = 32, SHCONTF_NONFOLDERS = 64, SHCONTF_INCLUDEHIDDEN = 128, } [Flags] private enum […]

死锁从webapi中的异步DelegatingHandler读取异步响应内容

问题 我在WebAPI中使用DelegatingHandler来读取响应内容并将其审核到数据库。 当代码到达.ReadAsStringAsync()时,它似乎锁定并阻止其他请求完成。 我只知道这一点,因为当我删除违规行时,它完美无缺。 public static void Register(HttpConfiguration config) { config.MessageHandlers.Add(new ResourceAuditHandler()); } public class ResourceAuditHandler : DelegatingHandler { protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var response = await base.SendAsync(request, cancellationToken); string content = “”; if (response.Content != null) { //THIS SEEMS TO CREATE DEADLOCK! content = await response.Content.ReadAsStringAsync(); } AuditResponseToDatabase(content); return […]

如何找出iis7中404error handling程序中缺少哪条请求路径?

我想在iis 7中创建一个自定义error handling程序。 web.config httpErrors部分: web.config httpHandler来处理错误: Image404Handler c#代码: public void ProcessRequest(HttpContext context) { string requestpath; if (context.Request.QueryString.AllKeys.Contains(“aspxerrorpath”)) { requestpath = context.Request.QueryString[“aspxerrorpath”]; } else { requestpath = context.Request.Path; } // more code not really relevant here } 我无法弄清楚如何获取导致404错误触发的请求的路径。 在IIS 6中,Visual Studio 2008使用此路径将添加到查询字符串中的aspxerrorpath。 我无法进行远程调试工作,所以我在这里询问是否有人知道该怎么做。

IIS7文件映射 – .asax,.ashx,.asap

IIS使我们能够配置Asp.Net文件映射。 因此,除了aspx之外,当请求具有以下文件扩展名时,IIS也会调用Asp.Net运行时: a).ascx – > .asmx扩展名用于请求用户控件。 由于无法直接访问用户控件,任何人都可以向用户控件发送请求的方式和原因是什么? b).ashx – >此扩展用于HTTP处理程序。 •但是为什么要直接请求.ashx页面而不是在配置文件中注册此处理程序并在请求具有某些(非ashx)扩展名的文件时调用它? •此外,由于可以注册几个Http处理程序,如果Asp.Net都使用ashx扩展,Asp.Net将如何知道调用哪个处理程序? •请求的ashx文件包含哪些内容? 也许是Http处理程序类的定义? •我知道如何在请求非ashx页面时注册Http处理程序,但是我们如何为ashx页面注册Http处理程序? c).asax – >此扩展用于请求全局应用程序文件 •为什么我们要直接调用Global.asax? •我假设在请求Global.asax时,会创建一个从HTtpApplication类派生的对象,除非这次没有进行网页处理? 感谢名单 问 – 除了Asp.Net能够请求global.asax进行编译之外,还有其他原因可以选择直接请求带.asax扩展名的文件吗? •ashx文件无需注册。 它们基本上是一个更简单的aspx,因为当你不需要整个页面生命周期时。 常用的是从数据库中检索动态图像。 因此,如果我编写一个Http处理程序,我应该把它放在一个扩展名为.ashx的文件中,而Asp.Net将构建一个HttpHandler对象,类似于它是如何从.aspx文件构建一个页面实例的? •如果黑客确实试图请求其中一个文件,您希望发生什么? 您当然不希望IIS将其视为文本文件,并将您的应用程序的源代码发送到浏览器。 Asp.Net可以像使用.cs,.csproj,.config,.resx,.licx,.webinfo文件类型一样。 也就是说,它使用IIS注册这些文件类型,以便它可以明确地阻止用户访问这些文件 •仅仅因为您不希望浏览器请求资源,这并不意味着您不希望asp.net引擎处理该资源。 这些扩展也是ASP.Net如何为网站模型站点选择要编译的文件。 但是为什么Asp.Net也不允许直接请求.cs,.csproj,.config,.resx,.licx,.webinfo文件? a)和c) – 据我所知,这些不会受到任何外部请求的处理 我的书声称这两个映射在IIS中 我感谢您的帮助 编辑: b).ashx扩展在配置文件中定义,它不是web.config,它在machine.config中 http://msdn.microsoft.com/en-us/library/bya7fh0a.aspx 为什么使用.ashx:区别在于处理.ashx的.NET类读取.ashx文件中的Page指令以将请求映射到该指令中指定的类。 这样就不必为每个处理程序在web.config中放置一个显式路径,这可能会导致web.config很长。 我认为Http处理程序类是在.ashx文件中定义的,但是扩展名为.ashx的文件只包含Page指令? 因为我不能100%确定我是否理解正确:假设我们要通过向IIS7发出请求来调用10个Http处理程序。 我假设每个Http处理程序都会有特定的.ashx文件 – >因此,如果对FirstHandler.asxh发出请求,那么将调用该文件中指定的处理程序? 再编辑: 我必须承认,我仍然对ashx扩展有点不确定。 我意识到通过使用它我们可以创建’hey.ashx’页面,其中Page指令将告诉在为’hey.ashx’发出请求时调用哪个类(Http处理程序) – 因此无需在Http处理程序中注册Http处理程序web.config中。 […]

如果发生exception,“Content-encoding”标头将从HttpHandler响应中消失

我有一个自定义的HttpHandler,我在其中手动启用输出压缩,如下所示: context.Response.AppendHeader(“Content-encoding”, “gzip”); context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress); 这适用于大多数请求,但遇到exception时,“内容编码”标头会从响应中消失,而压缩filter仍保留在原位。 结果是错误页面被gzip压缩,但是浏览器没有收到表示该事实的标题。 然后浏览器尝试将仍然压缩的数据显示为文本,即gobbledygook 。 完整的测试用例代码如下所示。 尝试交替禁用压缩或不抛出exception。 有人可以解释为什么“内容编码”标题消失了吗? 我想我可以简单地启用压缩作为处理程序的最后一件事,因此如果遇到exception,它永远不会到达添加压缩filter的点; 但我看到的行为让我感到害怕。 谁能确认一下? public class TestHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { CompressResponse(context); context.Response.Write(“Hello world”); // Throw an exception for testing purposes throw new Exception(“Just testing…”); } private void CompressResponse(HttpContext context) { string acceptEncoding = context.Request.Headers[“Accept-Encoding”]; if (String.IsNullOrEmpty(acceptEncoding)) […]