VS2005 C#创建WebService使用线程

VS2015 C++环境下使用gSOAP创建和调用WebService完整指南 WebService作为一种基于SOAP/WSDL的远程过程调用(RPC)协议,通过XML格式实现跨平台、跨语言的系统间通信。其核心原理是将函数调用封装为SOAP消息,通过HTTP/HTTPS传输,实现分布式系统的松耦合集成。在C++开发中,手动处理SOAP协议、XML解析和网络通信等技术细节较为复杂,而gSOAP工具链通过自动化代码生成,显著降低了开发门槛。该方案在遗留系统集成、企业级应用互操作等场景中具有重要价值。本文聚焦Visual Studio 2015 C++环境,详细解析如何利用gSOAP实现W 阅读详情

在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中的数据进行数据库操作了.

WCF+JSON vs WebService+DataSet性能实战对比 在分布式通信中,数据序列化方式直接影响系统吞吐量、内存占用与跨端兼容性。JSON作为轻量级文本协议,相比XML具有更低的标签冗余和更优的解析效率;而DataSet依赖XSD Schema的强类型XML序列化,在大数据量场景下易引发高内存消耗与CPU瓶颈。WCF通过契约驱动和可插拔序列化器(如Newtonsoft.Json)支持高效JSON传输,配合DTO模式可显著压缩载荷、提升TP99响应稳定性。该技术路径广泛适用于.NET存量系统升级、工业SCADA数据同步及移动端弱网环境下的API优化,是平衡开发效率与 阅读详情

相关推荐

C#(Csharp)多线程HTTP并发请求(HttpWebRequest)采集蜘蛛

C#(也称Csharp)在多线程下并发执行HTTP请求的实现,采用C#封装HttpWebRequest类开发的多线程并发采集程序源码文档,文档中详细说明了HttpWebRequest并发HTTP请求实现网站采集的方法,经过测试同时并发1000+不是问题,好东西和大家分享哦:)

C#线程调用webservice操作超时

正常情况下,调一个WebService是不成问题的,可是在多线程下,每个线程调一个WebService(都是不同URL的WebService),只有在编译后调第一遍是正常的,再调就报错啊,无法从命名空间“****”导入绑定“SyncToContractDataCenterSoap”,或者是调用目标异常,坑爹啊。在.net中,可以添加Web 引用来添加WebService,但是这种方法的缺陷是当WebService内的方法一变动,引用的系统这边就必须更新引用,重新编译,再发布,是不是很麻烦?

qq_39367709的博客 1276

线程线程使用C#3.5) 高效

线程线程使用C#3.5) 高效

VS2005 C#创建WebService使用线程(续)

 服务器端操作,我们建立WebService使用默认的Service.cs,然后再添加两个类,一个做数据库操作的DataControl类,另一个做日志操作及公用法的Common类。在Service.cs中添加两个WebService方法    // 接收数据方法    [WebMethod]    public bool inceptData(string[] item)    {       

xne2ds的专栏 2226

C# Web页面多线程任务

一、使用线程池队列实现 //创建线程池 ThreadPool.SetMaxThreads(10, 10); //多线程队列执行任务 foreach (var openid in openidList.GetRange(100, 100)) { ThreadPool.QueueUserWorkItem(id => { try { ...

weixin_42143410的博客 1181

c#的web项目当前线程不在单线程单元中,因此无法实例化 ActiveX 控件解决办法

C#制作web项目时,定义一个webbrowser对象,重新打开一个页面,运行时提示如下信息: 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 解决办法一: 引入线程池的概念对数据进行处理,如下: System.Threading.Thread th = new System.Thre

weixin_43621549的博客 2241

vs2005 c# mysql_VS2005 C#创建WebService使用线程(续)

服务器端操作,我们建立WebService使用默认的Service.cs,然后再添加两个类,一个做数据库操作的DataControl类,另一个做日志操作及公用法的Common类。在Service.cs中添加两个WebService方法// 接收数据方法[WebMethod]public bool inceptData(string[] item){dataList.Add(item);retur...

weixin_39559382的博客 187

使用C#编写webservice 连接oracle数据库

通过WEBSERVICE连接ORACLE 2011-06-14 14:07 经过一周的IIS折腾,一周的ORACLE折腾。在经过今天下午的一点小曲折,终于在VS2005下对MFC引用WEBSERVICE连接ORACLE数据库取得了初步的成功。现总结一下: 这个过程分三步走: 一创建WEBSERVICE(C#) 二 C#连接ORACLE (PS:我开发WEBSERVIC

stonesharp的专栏 1万+

oracle 链接wince,通过WEBSERVICE连接ORACLE

经过一周的IIS折腾,一周的ORACLE折腾。在经过今天下午的一点小曲折,终于在VS2005下对MFC引用WEBSERVICE连接ORACLE数据库取得了初步的成功。现总结一下:这个过程分三步走:一创建WEBSERVICE(C#)二 C#连接ORACLE (PS:我开发WEBSERVICE用的是C#);三 VS下MFC程序调用WEBSERVICE。现将其中碰到的问题及解决过程记录如下:一 IIS的...

weixin_35750953的博客 373

Winform异步调用WebService

        当使用WebService得到比较大的数据集的时候由于数据量大的话下载需要时间比较长,所以使用异步的方式调用WebService能更好的提高用户体验,不会使用户感觉到"死机".         在Vs2005创建WebService时IDE会自动创建该服务的异步调用,名字一般是Bgein+服务名和End+服务名,在前期项目中使用的异步调用贴出来.           

成长记录笔记 2920

C#做的小巧Web服务器,支持多线程和断点续传

C#做的小巧Web服务器,支持多线程和断点续传 说明:首次运行不能进行任何设置, 运行后会生成SZX Web Server.INI文件,先用任务管理器结束本程序,再用记事本打开上述INI文件,将所有的False都改成True,然后保存,重新运行本程序即可。

【技术小结】sql server 调用webservice

自上次做AMAZON的队列整合之后,很久没有专心做技术研究了,哥发现做这些技术研究,还是很开心的,至少可以暂时忘记一些事情,给自己带来快乐!哈哈!! 【技术小结】sql server 调用webservice -------------------------- -------------------------- 需求是这样的 数据库需要在存储过程中,调用一个算法进行数据验证。 ...

俺是石头 1086

c webservice html,C++调用WebService服务问题总结

近期接手一部分C++研发工作,同时与.NET开发小组进行软件功能协作,于是需要调用.NET WebService服务,已完成数据的网络通讯业务功能;结束之余,将手头碰到的问题总结罗列如下:C++如何调用.NET WebService服务。如何进一步灵活设定WS服务的地址。ATLSOAP: CSoapRootHandler::InitializeSOAP -- failed to get SAXXM...

weixin_39694264的博客 420

[.Net码农]C# WebService异步处理/异步调用详解

http://www.csframework.com/archive/5/arc-5-20110612-1593.htm C# WebService异步处理/异步调用详解(附实例源代码) 有时WebService后台程序在运算复杂的数据时客户界面呈现等候状态, 在有些情况下客户不愿意等候也不关心运算何时结束。从设计角度来看至少可使用两种方法解

能看代码的CrackLibby 9335

VS 2005使用C#创建及调用WebService完整实例

关于WebService的概念及相关说明,在这里就不多说了,直接说如何实现IIS配置安装IIS(Windows 默认安装即可),确认可以从其他IP访问本机的默认主页,安装ASP.NET 2.0到IIS(确认本机已安装.NET Framework2.0.50727,在命令窗口运行” C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -i”安装,运行” C:/WINDOWS/Microsoft.NET/Framework/v2.0.

meerio的专栏 3437
上一篇: 关于C#中窗体之间传值
下一篇: VS2005 C#创建WebService使用线程(续)
xne2ds
博客等级 码龄20年 2粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值