我需要理解以下陈述
声明 - 1
最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序.当用户请求.aspx文件时,页面通过页面处理程序处理请求.
声明 - 2
例如,您可以编写自己的图像来从数据库而不是从Web服务器本身提供图像等,或编写简单的POX服务(而不是SOAP/WCF /等)
声明 - 3
ProcessRequest在Page Life Cycle中的重要性是什么?
我正在构建一个相当简单的CMS.我需要拦截Web应用程序中大多数.aspx页面的请求,以便完全控制输出.在大多数情况下,输出将从缓存中提取,并且只是纯HTML.
但是,仍然有几页我需要使用asp:controls on.我认为绕过一些特定请求的最好方法是继承System.Web.UI.PageHandlerFactory,并在需要时调用MyBase实现(如果我错了,请纠正我).但是如何将所有其他请求转移到我的自定义处理程序?
这是我的代码登录
var expire = DateTime.Now.AddDays(7);
// Create a new ticket used for authentication
var ticket = new FormsAuthenticationTicket(
1, // Ticket version
username, // Username to be associated with this ticket
DateTime.Now, // Date/time issued
expire, // Date/time to expire
true, // "true" for a persistent user cookie (could be a checkbox on form)
roles, // User-data (the roles from this user record in our database)
FormsAuthentication.FormsCookiePath); // Path cookie is valid for
// Hash the cookie for transport over …Run Code Online (Sandbox Code Playgroud) 我无法从IIS 7压缩来自自定义处理程序的动态内容.
我们的处理程序吐出json数据(Content-Type:application/json; charset = utf-8)并响应url,如下所示:domain.com/example.mal/OperationName?Param1=Val1&Param2=Val2
在IIS 6中,我们所要做的就是编辑MetaBase.xml,并在IIsCompressionScheme元素中确保HcScriptFileExtensions属性包含自定义扩展名"mal".
静态和动态压缩在服务器和网站级别进行.我可以确认正常的.aspx页面是否正确压缩.我无法压缩的唯一内容是来自自定义处理程序的内容.
我尝试过以下配置但没有成功:
<handlers>
<add name="MyJsonService" verb="GET,POST" path="*.mal" type="Library.Web.HttpHandlers.MyJsonServiceHandlerFactory, Library.Web" />
</handlers>
<httpCompression>
<dynamicTypes>
<add mimeType="application/json" enabled="true" />
</dynamicTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
_
<httpCompression>
<dynamicTypes>
<add mimeType="application/*" enabled="true" />
</dynamicTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
_
<staticContent>
<mimeMap fileExtension=".mal" mimeType="application/json" />
</staticContent>
<httpCompression>
<dynamicTypes>
<add mimeType="application/*" enabled="true" />
</dynamicTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
由于ASP.NET响应过滤和后缓存替换不兼容,我需要一种过滤输出的替代方法.参考:http://support.microsoft.com/kb/2014472
有没有办法在不使用响应过滤器的情况下更改标记?
我正在遇到一个关于HttpHandler的一个非常好奇的问题,我希望这里的某些人能够阐明这一点.非常感谢您提前阅读本文.
我们创建了一个HttpHandler,它位于IIS网站的管道中,用于提供图像,视频和其他资产.HttpHandler非常轻巧.其唯一目的是检查磁盘上是否存在所请求的媒体资产,如果不存在,则将资产的URL重新写入资产所在的位置.已经以这种方式创建了处理程序,以允许我们将媒体资产迁移到新的文件夹结构中.我们还计划在图像和视频URL上使用处理程序(我将从此处称为URLRewriter)用于SEO.
如前所述,URLRewriter类非常轻量级.我们对它进行了内存分析,并确定它在运行时只消耗大约12B的内存.但是,当我们将处理程序放入IIS管道时,我们会看到一些奇怪的行为,最终会导致大量的内存消耗,并且总是会导致w3工作进程回收.我们看到的行为是这样的:
当请求http://www.ourimageserver.com/media/a/b/c/d/image1xxl.jpg(而不是实际的URL)上的图像请求时,我们注意到W3WP.exe创建并挂起,图像路径中每个文件夹的句柄:
•/ media•/ media/a•/ media/a/b•/ media/a/b/c•/ media/a/b/c/d
这是一个很大的问题,因为我们拥有数十万个媒体资产,这些资产存储在一个非常广泛且非常深的文件夹结构中.当URLRewriter部署到我们的生产环境时,IIS/W3WP创建的句柄数量迅速增长,W3WP的内存消耗也相应增加.在不到一个小时的运行时间(在交通相对平静的时期),W3WP持有的手柄数量超过22000,并且该过程已经死亡.我们还注意到,部署URLRewriter的服务器上的内核内存使用量有所增加.
使用Process Explorer和Process Monitor(无论是否附带VS调试器)仔细检查W3WP的行为,都会发现句柄是在调用URLRewriter之前创建的.实际上,句柄是在触发BeginRequest事件之前创建的.从管道中删除URLRewriter时,不会创建这些句柄.现在,一个非常奇怪的事情是,看起来句柄是由W3WP执行的NotifyChangeDirectory操作创建的.为什么W3WP会要求通知这些目录的更改?我们怎样才能阻止它这样做呢?当然这不是默认/正常行为吗?
如果您对可能导致此问题的原因有任何想法,我将非常感谢您的意见.IIS6和IIS7上的行为是相同的.
这就是我想要做的事情:
查询:
嗨,我需要一些建议.
我需要一种方法来跟踪我网站上的用户活动,而无需第三方工具(例如google anayltics).
所以基本上来到我的网站的任何请求我需要触发一个异步任务,该任务将收集用户的信息并写入数据库.最好的方法是什么?
我曾尝试编写异步httphandler,但我无法开始工作.它为每个请求多次命中(对于所有资源文件,如css jpg ......).
目前我正在试图安装一个项目,以实现对JavaScript文件的定位(如描述在这里),但在同一时间,我想捆绑,然后再缩小在项目中的JavaScript.我在这里关注了捆绑和缩小的教程
我已经能够让两者分开工作,但是当我试图让它们一起工作时,我无法使本地化正常工作.我认为这是因为捆绑为它生成的捆绑/缩小的javascript创建了它自己的路由处理,所以我在webconfig中定义的httpHandler被忽略了.我一直收到javascript错误,说"CustomTranslate未定义".
我试图这样做是因为我们正在使用ExtJS构建一些控件,但我们需要能够将本地化应用于这些控件.关于如何让他们一起工作的任何帮助/想法将不胜感激.
我没有使用MVC,而是在Visual Studio 2012中的asp.net中执行此操作.
这是我的代码:
BundleConfig.cs
namespace TranslationTest
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
//default bundles addeed here...
bundles.Add(new ScriptBundle("~/bundles/ExtJS.axd").Include("~/Scripts/ExtJS/ext-all.js", "~/Scripts/ExtJS/TestForm.js"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
web.config中:
<globalization uiCulture="auto" />
<httpHandlers>
<add verb="*" path="/bundles/ExtJS.axd" type="TranslationTest.ScriptTranslator, TranslationTest" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
Default.aspx的
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TranslationTest._Default" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<script src="/bundles/ExtJS.axd"></script>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
TestForm.js:
Ext.require([
'Ext.form.*',
'Ext.layout.container.Column',
'Ext.tab.Panel'
]);
Ext.onReady(function () {
Ext.QuickTips.init();
var bd = …Run Code Online (Sandbox Code Playgroud) javascript asp.net localization httphandler bundling-and-minification
我想创建一个通用的Web API操作,它将接受JSON URL作为参数,然后将其转换为RSS.无论我到哪里,我都会找到RSS到JSON但不是相反.
我不想使用第三方服务,而是寻找可以做到这一点的库.有关如何利用Web API执行此操作的任何想法,还是应该为此创建一个简单的HTTP处理程序?
httphandler ×10
asp.net ×5
c# ×4
asp.net-mvc ×2
iis ×2
iis-7 ×2
compression ×1
dynamic ×1
httpcontext ×1
httpmodule ×1
javascript ×1
json ×1
localization ×1
memory-leaks ×1
rss ×1
webforms ×1