VS2005 C#创建WebService使用线程

本文介绍了如何在VS2005中利用C#创建WebService,并通过线程优化处理大量数据库操作。在客户端读取数据后,不再直接调用WebService进行操作,而是将数据暂存于List,当达到一定条件时启动线程执行数据库操作,以提高效率。同时,解决了因频繁HTTP请求导致的基础连接关闭异常,通过设置HttpWebRequest.KeepAlive为true来保持连接。

在VS2005 中我们很容易就可以创建一个WebService,只要在文件->新建->网站中选择ASP.NET Web服务点击确定即可,VS还会默认地建好一个HelloWorld的示例方法,当然我们也可以删除该方法,重新建立自己的方法,但是必须加上[WebMethod]标记,标识为可以从远程Web客户端调用该方法,例如

[WebMethod]

public string Test(string strOutput)

{

        string strReturnStr = null;

        //业务逻辑处理

        //返回处理结果

        return strReturnStr ;

}

我们在客户端调用后会根据我们编写的业务返回所期望的值.

而在C#中使用线程我们只需要创建一个需要处理的方法,然后使用线程去调用,例如

private System.Threading.Thread thread = new Thread(new ThreadStart(working));//working为必须提供的方法.

    public void working()
    {
        try
        {
            while (true)
            {
                //进行处理

            }
        }
        catch (ThreadAbortException e)
        {
            //写入异常

       }
        finally
        {

            //结束线程
            if (thread.IsAlive)

                thread.Abort();
            
        }
    }

在我们需要启动线程的地方,使用thread.Start()启动线程即可.

在WebServic中使用线程是基于应用程序业务发生变化,该应用程序负责使用其它外部设备读取数据,并对数据库做相应的操作,并只在局域网内进行,多个客户端对一个服务器,所以开发时没有考虑网络传输问题,而现在服务器已不在局域网,所有客户端的数据传输都必须基于互联网,以收集来自不同企业应用的数据,并在不同的数据库间做处理,所以使用WebService来处理这些复杂的操作,而客户端只负责调用相应的WebService即可.这时我们可能会想创建一个WebService方法,然后改动一点点客户端程序,调用WebService即可,并将以前写在客户端的处理逻辑搬到服务器端,用WebService方法来实现,但由于客户端取数据的特殊性,有可能在1秒内读取到几十到几百条数据,如果每读到一条的时候都调一次WebService做操作,而这些操作又与数据库相关,显然这种做法是不可取的,因为这样同样会花费很长的时间,那么我们就考虑了一种方法,改进WebService,在每次读到数据并调用WebSerice的时候,这个方法只负责把基础数据保存到一个容器中,比如List,而不做其它操作,让响应速度加快,这样当到达某一条件(可以是客户端请求也可以是服务器自动运行)的时候,我们再去启动(激活)线程,让这个线程去负责把List中的数据读取出来去做相应的操作,这种做从一定程序上是可以使应用程序保持以前的状态的.不会因为服务器不与客户端在同一局域网而变得很慢,还有一种方法就是将数据保存在本地,当达到某一条件(比如数量大于10000条)的时候,调用WebService将数据传输给服务器.当然结合不同的应用环境可以其它方式,而当我们欣喜地感觉到快要成功的时候,一个测试却让我们大失所望,数据还不超过1000条,在调用WebService的时候,因为出现以下异常:

基础连接已经关闭 接收时发生错误

这是因为http请求太多造成的,我们只需要在客户端代码中加上如下语句便可

System.Net.HttpWebRequest http = (HttpWebRequest)WebRequest.Create(Url);//Url服务器的URL

http.KeepAlive = true;

这样就可以解决传输时的问题,为了减轻服务器由于定时启动线程而带来麻烦,可以做两个WebService就方法来解决,一个用来将数据存入List,而另一个则通知服务器,数据存入已经完毕,可以启动数据操作类中的线程读取List中的数据进行数据库操作了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值