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中的数据进行数据库操作了.
[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中的数据进行数据库操作了.
相关文章推荐
- VS2005 C#创建WebService使用线程(续)
- c#中Invoke使用方法(线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程?)
- C# 线程 创建和使用
- 使用C#创建webservice及三种调用方式
- 使用C#创建webservice及三种调用方式
- 使用C#创建webservice及三种调用方式
- 使用vs2005 webservice 创建,部署,调用的简单实例
- VS2003 C#:重写键盘响应事件、动态创建控件、创建线程、在线程中使用委托在界面显示数据
- 使用C#(.net1.1)创建webservice及三种调用方式
- 如何使用C#创建WebService
- 使用C#创建webservice及三种调用方式
- 使用C#创建webservice及三种调用方式
- C# WebService中任务处理线程创建子线程后
- 使用C#创建webservice本地调用方式
- c#如何使用webservice、存储过程及存储过程的创建(简单模仿类似QQ统计用户在线时间为例)
- 如何使用C#创建WebService
- 使用C#创建webservice及三种调用方式
- 使用C#创建webservice及三种调用方式
- C# 多线程编程 - 使用Thread类创建线程
- 使用C#创建webservice及三种调用方式