自定义Page集类可以带来很多好处,如统一处理Cookie,安全性,参数等。不过在继承System.Web.UI.Page实现自己的BasePage时需要注意一点:谨慎的处理构造器(Constructor)中涉及的代码。如果疏忽了这点,可能会导致你在Vs.Net中无法所见即所得的编辑Aspx页面,打开页面时将抛出以下错误,你只能看到Html代码界面。

导致这一错误的最大可能的原因就是你在BasePage的构造器里使用了HttpContext的内容。而Vs.Net在显示所见即所得的Aspx页面时会初始化你的BasePage类,这时候如果使用了Request,Response等类时,由于HttpContext并不存在(因为不是在IIS环境中,没有PageFactory传递过来Http上下文),所以在初始化类时就抛出了NullReferenceException。
为了解决此问题,最好将访问HttpContext的代码放到OnInit中,如下:
protected override void OnInit(EventArgs e)
{
base.OnInit (e);
HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
}
这一override方法指示在PageHandler阶段被首先调用,而Vs.Net显示页面时并不会调用此方法,所以不会产生NullReferenceException。
如果你确实需要在构造器中进行某些Field的初始化等工作,这时又需要使用Request等内容,那么就需要先判断HttpContext是否为Null。如下:
public class BasePage : Page
{
public BasePage()
{
if(HttpContext.Current != null)
{
HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
}
}
}
有一个Web项目,Web.Config中requestEncoding和responseEncoding都是gb2312,而从数据库中取出的简介数据可能是中文和韩、日文混合的内容,这时候如果直接输出到页面上,其页面会出现乱码,其中的韩文内容无法正确显示。当然如果项目的编码都使用Utf-8的话将没有这个问题,但这个项目是一个老项目,为了尽量不要影响已有的程序,所以无法将编码改为Utf-8,只能在本页面上动脑筋。
经过研究,发现这个问题可以通过Html实体的方法解决。
对于Html实体请参考:
Character entity references in HTML 4
HTML Document Representation
测试代码:
Byte[] bComments = Encoding.UTF8.GetBytes("一ンブル????中文");
char[] cComments = Encoding.UTF8.GetChars(bComments);
StringBuilder charBuilder = new StringBuilder();
foreach(char c in cComments)
{
if(c > '\u0800')
{
charBuilder.Append("&#");
charBuilder.Append((int)c);
}
else
{
charBuilder.Append(c);
}
}
Response.Write(charBuilder.ToString());
这段代码的作用是将所有的中文、韩文、日文字符通过硬编码输出成为html实体。而Html实体是不受ResponseEncoding和页面编码集影响的。
说明:
\u0800 以上的为中、韩、日字符。
中文的范围:\u4e00 - \u9fa5,日文在\u0800 - \u4e00,韩文为\u9fa5以上。
这个方法仅仅是为了解决小范围问题,如果各位有更好的办法请指教。
1.实体类:
[Table(Name="Customers")]
public class Customer
{
public string CustomerID;
public string City;
}
使用Attribute定义ORM的关系,这样的好处是无需产生和维护大量映射文件。
[Table(Name="Customers")]
public class Customer
{
[Column(Id=true)]
public string CustomerID;
[Column]
public string City;
}
通过Attribute自定义列,定义主键(PK)……
2.数据上下文
// DataContext takes a connection string
DataContext db = new DataContext("c:\\northwind\\northwnd.mdf");
// Get a typed table to run queries
Table<Customer> Customers = db.GetTable<Customer>();
// Query for customers from London
var q =
from c in Customers
where c.City == "London"
select c;
foreach (var cust in q)
Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);
这个比较猛,直接写查询,from in where select都成了关键字。直接在对象上进行查询不再考虑数据库了。并且范型化了。
看到var,众位做过asp的兄弟是不是很亲切阿,这是动态语言(解释语言)的特性,变量定义时不定义类型,不过这里应该不是动态语言,应该是根据上下文在编译时确定类型的。
Northwind db = new Northwind("c:\\northwind\\northwnd.mdf");
var q =
from c in db.Customers
where c.City == "London"
select c;
foreach (var cust in q)
Console.WriteLine("id = {0}, City = {1}",cust.CustomerID, cust.City);
简单写法。
public partial class Northwind : DataContext
{
public Table<Customer> Customers;
public Table<Order> Orders;
public Northwind(string connection): base(connection) {}
}
继承一下,表成了成员了。
3.关系定义
[Table(Name="Customers")]
public class Customer
{
[Column(Id=true)]
public string CustomerID;
...
private EntitySet<Order> _Orders;
[Association(Storage="_Orders", OtherKey="CustomerID")]
public EntitySet<Order> Orders {
get { return this._Orders; }
set { this._Orders.Assign(value); }
}
}
[Table(Name="Orders")]
public class Order
{
[Column(Id=true)]
public int OrderID;
[Column]
public string CustomerID;
private EntityRef<Customer> _Customer;
[Association(Storage="_Customer", ThisKey="CustomerID")]
public Customer Customer {
get { return this._Customer.Entity; }
set { this._Customer.Entity = value; }
}
}
Customer和Order是一对多关系,Customer中EntitySet是实体集合,
即此Customer对应的orders,而Association来定义关系(在Property定义),OtherKey表示Order中的CustomerID是此关系的Key。而Order中EntityRef表示这是一个实体引用,用于返回Customer实体,他也是为了支持延时加载(Lazy)用的。Storage是为了表示该Property所对应的成员。
.Net Beta2中消失的ObjectSpaces正式成为了过去,而DLinq从ObjectSpaces的灰烬出生了。DLinq是在分析了ObjectSpaces的反馈之后重新设计的ORM Solutions。
DLinq:.NET Language Integrated Query for Relational Data,DLinq和XLinq(for Xml)共同组成了.net 3.0的关键部分——LinQ(:.NET Language Integrated Query ),即语言级集成查询能力。
DLinq是在分析了ObjectSpaces的反馈之后重新设计的ORM Solutions,作为更先进的查询数据库得到对象并且持久化对象的方式,DLinq将不再使用ObjectSpaces的mapping文件方式,而是使用了attribute 来进行mapping的定义。当然现在也有一些采用attribute 方式的Solutions,如XPO:http://www.devexpress.com/Products/NET/XPO/。不过DLinq的第一大特点将是任何ORM方案难以匹敌的,那就是语言级别的查询集成。这是目前ORM阵营(无论是.net、java或者其他)中都难以做到的。毕竟Linq是Anders Hejlsberg在主导(猜测,因为Demo和Channel9 video都是他),而这也是.net 3.0的主要提升啊。
此文依据 Dinesh Kulkarni()
http://blogs.msdn.com/dinesh.kulkarni/archive/2005/09/13/465089.aspx
应用协议 端口号/协议 说明
ftp-data 20/tcp FTP, data
ftp 21/tcp FTP. control
telnet 23/tcp
smtp 25/tcp Simple Mail Transfer Protocol
time 37/tcp timserver
time 37/udp timserver
domain 53/tcp Domain Name Server
domain 53/udp Domain Name Server
tftp 69/udp Trivial File Transfer
gopher 70/tcp
http 80/tcp www-http World Wide Web
pop3 110/tcp Post Office Protocol-Version 3
nntp 119/tcp Network News Transfer Protocol
netbios-ns 137/tcp NETBIOS Name Service
netbios-ns 137/udp NETBIOS Name Service
netbios-dgm 138/udp NETBIOS Datagram Serviceof
netbios-ssn 139/tcp NETBIOS Session Service
imap 143/tcp Internet Message Access Protocol
snmp 161/udp SNMP
snmptrap 162/udp SNMP trap
irc 194/tcp Internet Relay Chat Protocol
ipx 213/udp IPX over IP
ldap 389/tcp Lightweight Directory Access Protocol
https 443/tcp
https 443/udp
uucp 540/tcp
ldaps 636/tcp LDAP over TLS/SSL
doom 666/tcp Doom Id Software
doom 666/udp Doom Id Software
phone 1167/udp Conference calling
ms-sql-s 1433/tcp Microsoft-SQL-Server
ms-sql-s 1433/udp Microsoft-SQL-Server
ms-sql-m 1434/tcp Microsoft-SQL-Monitor
ms-sql-m 1434/udp Microsoft-SQL-Monitor
wins 1512/tcp Microsoft Windows Internet Name Service
wins 1512/udp Microsoft Windows Internet Name Service
l2tp 1701/udp Layer Two Tunneling Protocol
1720/tcp
QICQ 4000/udp
QICQ 8000/udp
QQ 1080/UDP Socks 代理
《木马的常用连接端口
木马类软件常用的连接端口,如tcp135、139、445、3389、5000等,我们称为敏感端口,另外“冰河”常用7626端口、“广外女生”常用6267端口。
《VPN使用端口:》
l2tp 1701/udp #Layer Two Tunneling Protocol
pptp 1723/tcp #Point-to-point tunnelling protocol
《远程控制软件pcAnywhere使用的端口》
它的“被控端”使用2个端口,数据端口(5631)和状态端口(5632)
《BT下载使用的端口》
BT默认使用的端口是6881,6882,6883.....6889 的TCP连接 (每一个下载只使用一个端口,顺次分配)
《架设CS服务器》
指定游戏连接端口为27016