




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何创建和发布Web Service WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用、ASP.NET Web Form程序、甚至其他语言的客户端,都可以与同一个WEB服务通信,其平台和语言无关性使其有了广阔的发展空间。利用VS2005和IIS我们可以很容易地发布一个WEB SERVICE,因为其中有几个细节需要注意,所在初学者常常在这里出现问题,现通过一个简单的例子说明如何创建和发布一个WEB SERVICE。环境:Windows Server 2003,.Net FrameWork 2.0,IIS6.0工具:VS20051.首先VS2005中新建一个WEB服务项目。打开“文件”-“新建”-“网站”,在对话框中选择“ASP.NET Web服务”,VS2005会自动生成一个Service.cs文件,包含如下代码:usingSystem;usingSystem.Web;usingSystem.Web.Services;usingSystem.Web.Services.Protocols;WebService(Namespace=/)WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)publicclassService:System.Web.Services.WebServicepublicService()/如果使用设计的组件,请取消注释以下行/InitializeComponent();WebMethod(Description=最简单的方法)publicstringHelloWorld()returnHelloWorld;你可以在这里修改自己的命名空间,加入自己的方法,但本文只是为了说明如何创建和发布,所以对Service.cs不做任何更改。若要修改,则写方法,注意前面要加上WebMethod。可以按F5运行此页面,同时也可以设置断点进行调试(前提是要将web.config中设为true,而实际项目运行中,则改为false)2.生成网站很简单,“生成”-“生成网站”或直接Shift+F63.发布网站也是简单,“生成”-“发布网站”,这里会弹出一个对话框,什么也不需要修改,记下发布的目录。比如:D:我的文档Visual Studio 2005ProjectsWebSite1PrecompiledWebWebSite1,我们需要目录下的文件。4.配置IIS在你的WEB目录下一个文件夹,比如webservice,并将第3步发布目录中的所有文件和目录拷贝到这个目录中,打开IIS,找到你的站点,在这个webservice目录上点右键,选择属性,在弹出对话框的“目录”选择项卡中点击“创建”按钮,然后确定即可。到这时,已经大功告成,你可以通过访问http:/域名/webservice/Service.asmx来验证。页面会出现如下图所示内容:注意:除了需要在IIS中对服务目录创建程序外,还要注意防火墙或杀毒软件的设置,我在首次访问service.asmx文件时,杀毒软件报告w3wp.exe在系统文件夹中生成asp_code.dll等,应该允许其他创建,否则会无法访问。通过这样简单的方法,你可以轻松建立自己的WEB服务,在同一站点还可以有多个WEB服务注意:其实从上面的第3步开始可以简化:“生成”-“发布网站”,这里会弹出一个对话框,更改目录位置,选择左边的本地IIS,右边选择默认网站,选择某个目录即可,再按确定即可,不需要第四步了。下面开始在项目中调用此服务:(调用之前要现在项目中添加服务引用)第一:对web项目点击右键,如图一。第二:点击添加web 引用,如下图二.第三:查找可用的web service,如果是本解决方案内的直接搜索就行,如果是外部的,就输入有效地址然后查询,这里面可以测试web service,如图三:第四:添加引用成功后就会出现Web References目录.如图四,然后就是调用了。这应该就是最基本的添加web service引用的方法了。当时我也是按照这样的思路去添加。发现类库中点击右键并没有出现我熟悉的 “添加web 引用”,而出现图五效果:此时我认为可能是升级的原因变成添加服务引用,接下来的操作和上面操作相同.点击出现图六;输入web service地址,测试连接都成功,添加成功后出现图七:然而调用的时候并不像想像的那么成功,结果可想而之,我添加的WCF服务。这里错误代码我就不好意思帖了。知道引用对象错了后,就是让类库来添加web service,然而点击类库后,右键并没有添加web 服务的选项。如何让类库支持添加web service引用成了我最大的难题。此时我咨询了同事,基本排除程序问题,因为通过网站形式可以正常访问web service。园子里的朋友你们在VS08中的类库会添加web servece引用吗?我搜索了一下午,毫无结果,最好只好再问别的同事,几经周折,我把方法贴出来show一下;第一:对目标类库点击右键,如图六:第二:点击“添加服务引用”如图八:关键是图左下角的“高级”按键。点击如图九:第三:注意了,同样是左下角,“添加WEB引用”的按钮终于出现了,点击如图十:之后的操作就不多说了。到这里,就最终完成了C#的类库中添加Web Service引用的目的。操作并不复杂,只是实在是想不明白,VS为什么要把添加web引用放的这么隐蔽呢,难道是为了WCF的推广?而在项目中实际调用时这样写:SerRef.Service ws = new SerRef.Service();/SerRef是web引用名。 string sst = ws.HelloWorld();/HelloWorld是服务方法。若是后来重新对服务进行添加了新的服务方法,注意别忘了点击服务别名,右键“更新web引用”。运行项目时若出现类似“权限。”的错误时,请按照给出的提示(vs 2008中会有建议操作的,点下就ok了)更正。好像在调试过程中不能在调用方法时单步调试。上面是发布与调用web服务,而WCF服务是类似的(建立是应选择WCF服务,不要选择新建”-“网站”,在对话框中选择“ASP.NET Web服务”)在web service中如何得到客户端IP, 通过代理,获取真实的ipif(Context.Request.ServerVariablesHTTP_VIA!=null) ip=Context.Request.ServerVariablesHTTP_X_FORWARDED_FOR.ToString(); else ip=Context.Request.ServerVariablesREMOTE_ADDR.ToString(); C#WinForm利用Web Service API查询数据库并显示到客户端我们知道C#的Web ServiceAPI的返回值可以是DataSet类型,这就使得我们可以通过Web Service API来查询数据库,这个功能将成为我们许多应用的基础。下面我们用一个简单的Winform调用的例子来说明这个问题。首先我们有一个SQL Server2000数据库book在服务器webserviceserver上,book库中有张表bookinfo,包含书名、作者、价格等字段,数据库用户sa,密码123456。我们利用VS2005创建一个Web Service项目并发布出去,这里不再详述如何建立和发布,如有不清楚的地方请参阅相关资料。也可以参考我的另两篇文章:/cattiger75/archive/2007/10/17/1828896.aspx(如何创建和发布WEB SERVICE)/cattiger75/archive/2007/10/19/1832803.aspx(C#WINFORM里如何调用WEB Service API)我们在项目的Service.cs里编写一个查询数据库的API,为了简化问题,我们编写的这个API只接受一个字符串参数,用来在书名字段做前方匹配的查询,返回一个DataSet,这个DataSet中包含一个名为bookinfo的DataTable,bookinfo中含有书名、作者和价格字段,代码如下:usingSystem;usingSystem.Web;usingSystem.Web.Services;usingSystem.Web.Services.Protocols;usingSystem.Data;usingSystem.Data.SqlClient;WebService(Namespace=/)WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)publicclassService:System.Web.Services.WebService/定义一个sqlconnection连接成员SqlConnectionsqlconn=newSqlConnection(Server=webserviceserver;InitialCatalog=book;uid=sa;pwd=123456);/貌似必须用sa方式登陆啊publicService()/如果使用设计的组件,请取消注释以下行/InitializeComponent();WebMethodpublicstringHelloWorld()return欢迎使用我的WEB服务!;WebMethodpublicDataSetsearchBook(stringbookname)sqlconn.Open();stringsql=selecttop50书名,作者,价格frombookinfowhere书名like+bookname+%orderbyiddesc;SqlDataAdapterda=newSqlDataAdapter(sql,sqlconn);DataSetds=newDataSet();da.Fill(ds,bookinfo);returnds;编写好后将Web Service发布出去。现在我们来建立一个winform的Windows应用程序项目,并在项目中将我们刚刚发布的WEB Service做为一个WEB引用添加进来。在项目窗体中创建一个textbox控件用来输入查询内容,一个名为btnBookSearch的查询button,一个DataGridView控件用来绑定获得的dataset。双击查询button编写如下事件处理函数。privatevoidbtnBookSearch_Click(objectsender,EventArgse)/定义一个WebService对象,WebReference是我们添加WEB引用时取的名称WebReference.Servicews=newcqust.libmanage.WebReference.Service();this.dataGridViewBookInfo.AutoGenerateColumns=true;/将返回的dataset绑定到datagridview上this.dataGridViewBookInfo.DataSource=ws.searchBook(this.textBoxSearchString.Text);/指定显示的datatablethis.dataGridViewBookInfo.DataMember=bookinfo;编译项目并行,你将会在datagridview中看到查询的结果。我们的例子非常简单,没有考虑诸如异常捕获、异步调用、安全性等问题,但是它说明了利用Web Service API查询数据库是非常简单的,通过对这个简单API的扩展,你可以实现非常复杂的数据库查询。C/S框架-发布和部署WebService 一、C/S框架-WebService部署图如下图所示,C/S框架由Client端及WebServer端组成。客户端引用WebService接口(可以在CSFramework_Client.WebServices.dll.config文件内配置引用地址)。服务端(WebServer)建立在传统的IIS服务器之上。 服务端就是一个网站,提供一组服务接口给客户端调用,如客户端请求频繁负荷较大的情况下建议WebServer与数据库服务器分离。 二、发布WebService1.Begin Publish Website. 2.选择发布的目录(作为网站的虚拟目录) 3.Publish Succeeded. 4.查看已发布的文件. 5.新建网站(WebServer). 6.输入网站名称. 7.将网站虚拟目录设置为刚才发布的目录. 8.设置网站访问权限. 9.网站虚拟目录创建成功. 10.查看新建的网站. 11.游览网站内容. 12.打开一个WebService页面(DataDictionarySystem.asmx)查看Web方法. 13.在IE内打开一个WebService站点. 二、C/S框架-配置客户端14.用记事本打CSFramework_Client.WebServices.dll.config文件,修改WebService引用地址. 15.替换WebService引用地址. 16.运行客户端程序CSFramework_Client.Main.exe. 三、数据库连接配置因开发环境中使用SQL Express 2005数据库,SQL授权方式为:Integrated Security=True;当发布WebService后需要更改连接字符串:User ID=sa;password=csframework; 使用SQL授权登录。 (貌似只能用sa用户名登陆,反正用windows方式登陆不可以)开发环境: ConnectionString-IDE=server=.SQLEXPRESS;AttachDbFileName=D:My SourceCodeCSharpCSFramework-WebService-CHT-正式版source.clientdebugDatabaseCS_WebServiceII.mdf;Integrated Security=True; 正式环境: ConnectionString=server=.SQLEXPRESS;User ID=sa;password=csframework;AttachDbFileName=D:My SourceCodeCSharpCSFramework-WebService-CHT-正式版source.clientdebugDatabaseCS_WebServiceII.mdf; 17.当客户端无法连接服务端时跟踪程序出错解决方案: Login failed for user sa. The user is not associated with a trusted SQL Server connection 1。出现这个问题的一个原因是sql server没有启用混合登录模式,可在数据库属性更改登录模式为Windows验证和用户验证混合模式,更改模式后一定要重启sql server服务器 2。另一个可能的原因是根本就不存在这个用户,新建该用户即可解决登录问题。 18.打开SQL Express 或 SQL 2005/2008 Enterprice Version,在服务器树结点右键打开Properties窗体. 19.更改登录模式为Windows验证和用户验证混合模式. 20.SQL Server Configuration Manager. 21.重启SQL服务. 22.恭喜!您从此学会了发布和部署WebService! 网上的动态调用WebService一个非常好的例子。今天調適一個webservice,發琭我的winform一直都在調用局域緒的webservice,突然想到,要是我的winform程序,想要運行在不同緒斷,那應該如何配置我的webservice?方案一:1.用一個公用的webservice.就是把webservice發布到internet上,然後,winform調用inernet上的webservice.2.在每個局域緒都建立webservice,動慴的配置webservice. 每個webservice引用后,都會生成一個reference.cs,然後,在reference.cs裡面,更改url或者讀取事先寫在.config文件的url,編譯成各個局域緒的運行程序.3.建立webservice虚拟代理,使用xml登记webservice的引用地址。实现动态引用webservice.!using system;using system.reflection ;using system.web .services .description ;using microsoft.csharp;using system.codedom ;using piler ;using system.io ;using system.text ;using system.xml ;using ;using webserviceproxy;namespace webserviceproxy public class webserviceproxy private assembly _ass = null; private string _protocolname = soap; private string _srcwsproxy = string.empty; public assembly assembly get return _ass; public string protocolname get return _protocolname; set _protocolname = value; public string srcwsproxy get return _srcwsproxy; public webserviceproxy () public webserviceproxy (string wsdlsourcename) assemblyfromwsdl(getwsdl(wsdlsourcename); public string wsdlfromurl(string url) webrequest req = webrequest.create(url); webresponse result = req.getresponse(); stream receivestream = result.getresponsestream(); encoding encode = system.text.encoding.getencoding(utf-8); streamreader sr = new streamreader( receivestream, encode ); string strwsdl = sr.readtoend(); return strwsdl; public string getwsdl(string source) if(source.startswith( 0) throw new exception(string.format(build failed: 0 errors,cr.errors.count); return _ass = piledassembly; public object createinstance(string objtypename) type t = _ass.gettype(webserviceproxy.webserviceaccessor + . + objtypename); return activator.createinstance(t); public object invoke(object obj, string methodname, params object args) methodinfo mi = obj.gettype().getmethod(methodname); return mi.invoke(obj, args); 4.動慴調用webservice (copy from /1/133950.shtml)/*/ / 根据指定的信息,调用远程webservice方法 / / webservice的http形式的地址 / 欲调用的webservice的命名空间 / 欲调用的webservice的类名(不包括命名空间前缀) / 欲调用的webservice的方法名 / 参数列表 / webservice的执行结果 / / 如果调用失败,将会抛出exception。请调用的时候,适当截获异常。 / 异常信息可能会发生在两个地方: / 1、动态构造webservice的时候,compileassembly失败。 / 2、webservice本身执行失败。 / / / / object obj = invokewebservice(http:/localhost/gsp_workflowwebservice/common.asmx%22,%22genersoft.platform.service.workflow%22,%22common%22,%22gettooltype%22,new object1); / / private object invokewebservice(string url, string namespace, string classname, string methodname, object args) try .webclient wc = new .webclient(); system.io.stream stream = wc.openread(url+?wsdl); system.web.services.description.servicedescription sd = system.web.services.description.servicedescription.read(stream); system.web.services.description.servicedescriptionimporter sdi = new system.web.services.description.servicedescriptionimporter(); sdi.addservicedescription(sd,); system.codedom.codenamespace cn = new system.codedom.codenamespace(namespace); system.codedom.codecompileunit ccu = new system.codedom.codecompileunit(); spaces.add(cn); sdi.import(cn,ccu);microsoft.csharp.csharpcodeprovider csc = new microsoft.csharp.csharpcodeprovider(); piler.icodecompiler ic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 静脉留置针的定义
- 产品物料编码管理制度
- 住宅建筑消防管理制度
- 仪器产品溯源管理制度
- 给员工培训财务管理制度
- 仓库干饭日常管理制度
- 中铁十局公司管理制度
- 企业招聘合同管理制度
- 仓库工具使用管理制度
- 代办公司财务管理制度
- 某冶金机械厂供配电系统设计
- 收费站年度工作计划
- xx县精神病医院建设项目可行性研究报告
- 《在中亚细亚草原上》赏析 课件
- 城市轨道交通供电技术442页完整版教学课件汇总全书电子教案
- Q/GDW248-2008输变电工程建设标准强制性条文实施管理规程第3部分:变电站建筑工程施工教程文件
- 班组会议运作技巧ppt课件
- 小学生综合素质评价方案与评价表
- 技术比武理论复习题(继电保护)
- 科室医疗质量安全管理与持续改进记录本模板.doc
- DSP课程设计--基于IIR的语音信号滤波
评论
0/150
提交评论