ASP.NET 编程笔记(C#)

来源:互联网 发布:远走高飞网络走红小伙 编辑:程序博客网 时间:2024/06/05 02:33

1. Web页面的Socket编程

WEB页面的生存期仅在其装载过程中,一旦装载完毕,WEB页面内定义的所有变量都将被销毁,如果直接添加一个Socket连接,则该连接在装载完毕后也会被断开,要想持Socket连接,必须有一个一直运行的线程保持,该线程的生存期至少应保持到该页面被关闭之前。

这样只需要在页面装载时创建一个线程,在此线程内进行Socket连接,通过该Socket与服务器通讯。该线程的生存期如何控制呢?也就是应该何时销毁。应该按照我们上面的要求进行销毁,恰好,Session正好满足我们的要求。Session在该页面活动时一直有效,关闭该页面时立即失效,通过Session就可以设计程序了。

首先,页面每次调入我都检查对应的Session是不是为空,如果为空则创建一个线程,进行Socket连接,连接成功则在Session中保存该线程的一个引用,以后通过该引用访问线程,同时也保存Socket的一个引用,这样以后从Session中读入该引用,然后通过该引用进行通讯。当Socket连接失败或被服务器端断开时,则退出该线程,并释放Session,下次连接时再重新创建线程,重新连接。

发现这样会有一个很有趣的现像,网页中的Socket所连接的服务器只允许一个Socket连接,而该网页可以在很多机器上访问。为什么呢?因为Session是保存在服务器端的,而该页面的程序保存的只有一个Session,实际上在各个客户端的浏览器上访问的是同一个线程,同一个Socket连接,所以,多个客户端共享同一个连接。但是做实验室只能一个人使用,所以在访问该页面时需要进行一定的控制,如果其它客户端已经连接,则不打开该页面。

2. ASP.NET 项目文件夹结构

昨天在改ASP.nET的一个工程时发现一个很奇怪的问题,我为一个类添加了新方法,另一个地方调用了该方法,但编译时编译错误,没有该方法,找开元数据的定义一看,的确没有该方法,方法的定义还是跟原来的一样,代码没有更新,好像该文件没有重新编译一样。重启VS和重启电脑都不起作用,然后我就新建一个类,看它如何工作。

创建新类后,提示程序文件必须在App_Code文件夹中,于是创建了一个App_Code文件夹,然后把那些没有关联到页面的程序文件都移到了该文件夹下,编译,OK!

ASP.NET 2.0的文件夹及用途列表如下:
(1) /App_Code 用于保存类、WSDL和类型化的文件。
(2) /App_Data 保存应用程序的数据库。
(3) /App_Themes 保存主题文件 (.skin等)
(4) /App_GlobalResources 资源文件夹,存放字符表等

也不知道什么时候我的ASP.NET升级了,编译的时候还有警告说某些方法也过时了,让使用一些新的方法。

原创粉丝点击