您的位置:首页 > 编程语言 > C#

VS2005 C#创建WebService使用线程

2007-12-26 01:00 555 查看
在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中的数据进行数据库操作了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: