我创建了一个包含一些文本的图像,对于每个客户,图像都包含它们的名称,我使用Graphics.DrawString函数动态创建它,但是我不需要多次创建这个图像,只是因为客户名称几乎不会改变,但我不想将其存储在磁盘上.
现在我在处理程序中创建图像,即:
<asp:Image ID="Image1" runat="server" ImageUrl="~/imagehandler.ashx?contactid=1" />
Run Code Online (Sandbox Code Playgroud)
缓存图像的最佳方法是什么?我应该缓存它创建的位图吗?或者缓存我传回的流?我应该使用哪个缓存对象,我收集有很多不同的方法?但输出缓存对http处理程序不起作用吗?推荐的方式是什么?(我不喜欢在客户端缓存,我在服务器方面)谢谢!
我有实现 IRequiresSessionState 的 ASHX HTTPHandler。当我调用此处理程序并在另一个窗口中调用同一应用程序的 aspx 页面时,aspx 页面在 ashx 页面完成处理之前不会开始处理。即使从两个不同的窗口调用相同的 ashx 页面也会显示首先执行的页面被调用,然后执行下一个。
当我不实现 IRequiresSessionState 时,页面异步加载,无需等待其他页面完成。
对于希望在多个窗口中工作的最终用户来说,这可能是严重的瓶颈。
会话具有用户特定的数据。如果上述方法不起作用,则需要另一种方式来存储会话的用户特定数据,可以在 HTTPHandler 中使用。
其他信息: - 正在使用 ashx 处理程序来处理和发送内部需要 Session 的文件。
我试图在HTTP处理程序中重现线程错误条件.
基本上,ASP.net工作程序正在创建2个线程,当某个页面加载时,它会同时调用我的应用程序中的HTTP处理程序.
在http处理程序内部,是一个非线程安全的资源.因此,当2个线程同时尝试访问它时,会发生异常.
我可能会在资源周围放置一个锁定语句,但是我想确保它实际上就是这种情况.所以我想首先在控制台应用程序中创建这种情况.
但我不能像asp.net wp那样同时获得2个线程来执行一个方法.所以,我的问题是如何创建2个可以同时执行方法的线程.
编辑:
底层资源是带有用户表的sql数据库(仅具有名称列).这是我试过的示例代码.
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Linq2SqlThreadSafetyTest()
{
var threadOne = new Thread(new ParameterizedThreadStart(InsertData));
var threadTwo = new Thread(new ParameterizedThreadStart(InsertData));
threadOne.Start(1); // Was trying to sync them via this parameter.
threadTwo.Start(0);
threadOne.Join();
threadTwo.Join();
}
private static void InsertData( object milliseconds )
{
// Linq 2 sql data context
var database = new DataClassesDataContext();
// Database entity
var newUser = new User {Name = "Test"};
database.Users.InsertOnSubmit(newUser);
Thread.Sleep( (int) milliseconds);
try
{ …Run Code Online (Sandbox Code Playgroud) 我在一个"小"计算实例中托管在Windows Azure上的ASP.NET HTTP处理程序.它处理大型二进制文件的下载和上传.在该Web角色中没有其他任何内容,并且根据指南配置了2个实例.当从具有慢速连接的计算机完成下载并且我尝试一次执行多次下载以扼杀客户端的带宽时,有时我会ThreadAbortException在处理程序中获得一个,最常见的.Write是在Response.OutputStream(我Response.BufferOutput = false事先设置)中.堆栈跟踪如下:
System.Threading.ThreadAbortException: Thread was being aborted.
at System.Web.Hosting.UnsafeIISMethods.MgdExplicitFlush(IntPtr context)
at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()
at System.Web.HttpResponse.Flush(Boolean finalFlush)
at System.Web.HttpWriter.WriteFromStream(Byte[] data, Int32 offset, Int32 size)
at MyHandler.ProcessGetRequest(HttpContext context)
at MyHandler.ProcessRequest(HttpContext context)
Run Code Online (Sandbox Code Playgroud)
(该Stream.Write调用显然是内联的,因此它不会显示在堆栈跟踪中).
为什么线程被中止?我猜我正在达到某种超时(可能是套接字写入超时),正在以正常方式中止线程,以便ASP.NET运行时处理它?
请注意,它是一个单独的HTTP处理程序,而不是.aspx/.cshtml页面或MVC控制器,我的代码中没有任何地方,我接触Response.End,Response.Redirect或Server.Transfer.
Views文件夹中有一个.
应用程序的根目录中还有另一个.
我想注册一个自定义处理程序,我不知道代码应该去哪里.我在集成模式下运行IIS7所以我必须添加一个<handlers>标签,<system.webServer>但是当我在Views文件夹中查看web.config时,我看到它使用了<httpHandlers>under <system.web>标签.
所以有两个问题:1.为什么mvc应用程序中有两个web.config文件?2.我应该在何处以何种方式注册我的自定义HTTP处理程序?
我已经创建了一个HttpHandler,我将使用jquery-Ajax调用.
这个HttpHandler将访问数据库并检查与当前被烧毁的用户相关的内容.
通过使用Session,使用名为user_id的属性将用户视为已登录.
Session["user_id"] = userId;
Run Code Online (Sandbox Code Playgroud)
我试图在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);
}
});
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个坏主意,任何阅读代码的人都可以使用他想要的id访问Handler.
那么在这种情况下我该怎么办?我希望Handler获取user_id以进行数据库访问,但我想确保此user_id是已登录用户的实际ID.无法访问处理程序中的会话?
我有这个功能
searching() {
this._demoService.postData(this.url,this.searchtobesent).subscribe(
data =>{
this.listings=data;
this.errorMsg="";
if(data){
}
else{
this.errorMsg="Nothing Found";
}
},
error =>{
console.log("error : "+error);
this.errorMsg="Error Loading Your Listings";
}
) ;
}
Run Code Online (Sandbox Code Playgroud)
当后端有一些结果(以Json格式发送)时,一切正常。我想要的是结果为空且我从服务器收到此消息时
[]
Run Code Online (Sandbox Code Playgroud)
我希望this.errorMsg成为找不到的东西。任何帮助,将不胜感激;)谢谢
我已经创建了HTTP处理程序.
如何为这些处理程序创建全局变量,就像我可以使用global.asax中的ASP.net网页一样?
我一直在开发自定义HTTP处理程序.使用<httphandlers>ASP.NET 4.0和IIS7 的新web.config 部分,这在我的开发机器上运行良好.
但是,当我将代码上传到我的共享主机帐户时,我收到500服务器错误.我打电话给我的托管公司,他们说服务器报告了一个关于检测到的web.config设置的错误,该设置不适用于集成管道模式.
当他将IIS从集成模式切换到经典模式时,主页然后加载正常,但我的路由页面都报告403服务器错误.
我很确定我需要集成模式才能使该<httphandlers>部分工作,但我绝对不是IIS /管理员.有谁知道问题可能是什么或我接下来可以尝试什么?
编辑:我更新的web.config的大部分:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
[...]
</connectionStrings>
<appSettings>
[...]
</appSettings>
<system.web>
<httpHandlers>
<add verb="*" path="*.zip" type="BlackBelt.ZipHttpHandler"/>
</httpHandlers>
<compilation debug="false" targetFramework="4.0"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<handlers>
<add verb="*" path="BlackBelt.ZipHttpHandler" name="BlackBelt.ZipHttpHandler" type="BlackBelt.ZipHttpHandler"/>
</handlers>
<!-- Redirect domain.com to www.domain.com -->
<rewrite>
<rules>
<clear/>
<rule name="WWW Rewrite" enabled="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.([.a-zA-Z0-9]+)$"/>
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" appendQueryString="true" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud) 你能在MVC中创建一个带自定义扩展的自定义httphandler吗?
我想要一个具有以下路径的图像处理程序(如果可能),图片的domain.com/picture/{id}
是否有可能从MVC内部或我必须在IIS 7中做到这一点?