调用WCF服务后需及时关闭
调用WCF服务跟使用数据库连接一样,要注意及时关闭,如果没有及时很容易就会是连接数过多造成服务器崩溃。
测试环境:vs2010+ .NET Framework3.5+vs2010自带的WebServer(在不同的环境会有不同的结果)。
WCF服务使用环境自带的
测试代码:
1: protected void Page_Load(object sender, EventArgs e)
2: {
3: try
4: {
5: for (int i = 0; i < 1000; i++)
6: {
7: localhost.Service1Client wcf = new localhost.Service1Client();
8: wcf.GetData(1);
9: //wcf.Close();
10: Response.Write(i + "<br/>");
11: }
12: }
13: catch (Exception ex)
14: {
15: Response.Write(ex.Message);
16: }
17: }
18:
模拟创建1000个连接访问WCF。
运行结果:
创建10个连接WebServer就崩溃了。(有些人说WebServer没有连接数的限制,那是错误的)。
创建连接调用后立即关闭(调用Close()事件):
1: protected void Page_Load(object sender, EventArgs e)
2: {
3: try
4: {
5: for (int i = 0; i < 1000; i++)
6: {
7: localhost.Service1Client wcf = new localhost.Service1Client();
8: wcf.GetData(1);
9: wcf.Close();
10: Response.Write(i + "<br/>");
11: }
12: }
13: catch (Exception ex)
14: {
15: Response.Write(ex.Message);
16: }
17: }
18:
运行结果:
使用vs2010是上图的测试结果,在VS2008环境中,创建不到800个的连接也会使WebServer崩溃。
如果使用.NET Framework4.0,没有调用Close()也是可以创建全部1000个连接。
总之,最好的处理方式是不管在什么环境都要及时关闭调用连接,避免应连接数过多造成服务崩溃。