Asp.net果然可以异步处理http请求

这是我的一大发现。。(虽然很有可能早就有别人发现了。。)

我这里的异步是指,客户端1某此请求服务器端数据,服务器端先进行数据的接收,直到某一条件(比如说有另外的客户端2访问、某事件的触发)时,继续进行客户端1的数据的发送。

这里以客户端2的访问为例。

在aspx网页中放上一个Button,代码如下:

C#语言:
namespace Test
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Application["thread"] != null)
            {
                System.Threading.Thread th=Application["thread"] as System.Threading.Thread;
                if ((th.ThreadState & System.Threading.ThreadState.Suspended) > 0)
                {
                    HttpContext hc = Application["context"] as HttpContext;
                    hc.Response.Write("hello world!");
                    th.Resume();
                   
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Application["thread"] = System.Threading.Thread.CurrentThread;
            Application["context"] = HttpContext.Current;
            System.Threading.Thread.CurrentThread.Suspend();
            Response.End();
        }
       
    }
}

某个客户端1访问时,按下按钮,然后客户端1处于等待状态;

直到另外一个客户端2访问时,客户端1的服务器处理线程停止挂起状态,并且客户端1的输出交给了服务器处理客户端2时的线程。

这正是我想要的效果。Asp.net的Application真是强大啊。。

Asp.net中Application的收尾事件的触发

根据我之前的谷歌一下,貌似很多人都表示Application的各个事件(尤其是各种收尾事件)的触发十分诡异。

而且这些事件还十分有用。比如说如果用Application作缓存,用户输入的东西先不直接存储在数据库中而先保存到Application中,直到Application到达一定大小时再一起存储进数据库。如果Application在销毁时不利用事件将剩余的数据存储,那么那些数据就将丢失。

于是刚才做了个小程序尝试了一下。在global.asax里写下这个:

阅读更多

张总泪流满面 CloudClip云剪贴板 beta版发布

这样的张总:你在家里的电脑上按了CTRL+C,然后在公司的电脑上再按CTRL+V是肯定不行的。即使同一篇文章也不行。不不,多贵的电脑都不行。

张总的愿望终于可以实现了。经过将近半个月的折磨,这个传说中的“云剪贴板”终于发布了!现在开始我们可以在不同的电脑上共享多达100条的剪贴板,支持普通文本、word文档、HTML文档等格式!

当然google docs是最先实现这个功能的工具,不过并不是所有需要复制粘贴的东西都在google docs中,况且google docs不一定能时时刻刻访问(比如说连接被重置)。

不过现在这个程序的缺点就是不能跨平台,因为是用c#编的。我的索尼本不能用ubuntu,所以不能测试可不可以在mono下运行。估计够呛。

云端的地址初始为:http://graphonline.info/clip/service.asmx 程序中已经预先定义了这个地址。如果这个地址挂了,可以把云端的asp.net程序发布到别的主机上,然后改一下.config文件就可以了。

不过毕竟只是一个简单到极点的beta版的小工具,有一些力所不能及的事情它是不能做到的。比如说拷贝超过10k的大文本,在网络不好的时候很容易出错;不能拷贝excel表格,因为不知道为啥excel每次拷贝时总会同时拷贝四次,造成网络堵塞而出问题。更有许多bug,等待着大家去发现。

计划在下个版本中加入上传功能,解决目前的上传不稳定的问题;还打算加入对图片格式的支持。

好了不废话了。下面是下载地址:

客户端可执行文件(需要.net framework 2.0及以上(windows vista以上自带)):CloudClipWindow.exe

云端源代码(Visual Studio 2008+Asp.net 2.0):CloudClip

客户端源代码(Visual Studio 2008+C# 2.0):CloudClipWindow

依然是beta的 午饭管理系统

上个星期的这个时候正式进入了beta公测阶段,经历了一个星期的公测,我可以自豪的说,下个星期我们将步入beta2阶段。。

所以说我不打算把这个东西用在我们班了,怕被骂。所以打算赠送给现在高二的同学们,因为等他们想骂我的时候我已经在北京了。。

地址:http://www.wanganran.com/restaurant

已知问题:

  1. 在周六和周日新注册用户设置初始菜单时会出错;
  2. 新注册用户修改菜单时只能选择“仅更改当天的菜单”。

beta2较beta1的更新:

  1. 可以正常设置初始菜单;
  2. 数据库由MsSQL换成Access;
  3. 后台UI优化。

在vs2008中预编译Asp.net应用程序的方法

记得在做Asp.net网站时可以在“发布”中选择“预编译”选项,可是在Asp.net应用程序中却没有这个选项。

所以只能用命令行了。打开VS命令提示,输入:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>aspnet_compiler -v /Aspnet -p "C:\inetpub\wwwroot\mt" C:\inetpub\wwwroot\mt2

其中两个路径都应该是IIS应用程序的目录。第一个可能是未预编译的Asp.net程序,第二个必须是空目录。

而后可以发现第二个目录已经被预编译,aspx文件中只包含一句话:

这是预编译工具生成的标记文件,不应被删除!

也可以发现首次访问时速度会快许多。

Simple Blog.Net

Ok, 开始做这个项目了!

这应该是我有生以来做的第二个比较大的项目了。第一个是C#版的Graphics,不过目前想把它重构成asp.net的。

这是传说中的结构图。。虽然很不专业。点击看大图:

20100218149

 

这次时间足够,我一定要好好做。

设计就是这些了,明天开始coding.

asp.net进行网页截图

昨天做那个网站首页时,需要对一个子网页进行网页截图。这个东西看似困难,用google一查貌似有很简单的方法。。而且相当神奇,好象是用了ActiveX。所截出来的图片和真实的几乎一模一样,而且可以缩放大小。

首先在需要进行截图的aspx页面上修改第一行,加上AspCompat="true",为了使网页在STAThread模式下运行。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" AspCompat="true" %>

然后在页面里加入以下代码:

阅读更多