C#中调⽤WebService
如何创建和发布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
⼯具:VS2005
1.⾸先VS2005中新建⼀个WEB服务项⽬。
打开“⽂件”-“新建”-“⽹站”,在对话框中选择“www.doczj/doc/cf1627728.html
Web服务”,VS2005会⾃动⽣成⼀个Service.cs⽂件,包含如下代码:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "www.doczj/doc/cf1627728.html
/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {
//如果使⽤设计的组件,请取消注释以下⾏
/
/InitializeComponent();
}
[WebMethod(Description="最简单的⽅法")]
public string HelloWorld() {
return "Hello World";
}
}
你可以在这⾥修改⾃⼰的命名空间,加⼊⾃⼰的⽅法,但本⽂只是为了说明如何创建和发布,所以对Service.cs不做任何更改。若要修改,则写⽅法,注意前⾯要加上[WebMethod]。可以按F5运⾏此页⾯,同时也可以设置断点进⾏调试(前提是要将fig中设为true,⽽实际项⽬运⾏中,则改为false)
2.⽣成⽹站
很简单,“⽣成”-“⽣成⽹站”或直接Shift+F6
3.发布⽹站
也是简单,“⽣成”-“发布⽹站”,这⾥会弹出⼀个对话框,什么也不需要修改,记下发布的⽬录。⽐如:D:\我的⽂档\Visual Studio 2005\Projects\WebSite1\PrecompiledWe b\WebSite1,我们需要⽬录下的⽂件。
4.配置IIS
在你的WEB⽬录下⼀个⽂件夹,⽐如webservice,并将第3步发布⽬录中的所有⽂件和⽬录拷贝到这个⽬录中,打开IIS,到你的站点,在这个webservice⽬录上点右键,选择属性,在弹出对话框的“⽬录”选择项卡中点击“创建”按钮,然后确定即可。
到这时,已经⼤功告成,你可以通过访问域名/webservice/Service.asmx来验证。页⾯会出现如下图所⽰内容:
注意:除了需要在IIS中对服务⽬录创建程序外,还要注意防⽕墙或杀毒软件的设置,我在⾸次访问ser
vice.asmx⽂件时,杀毒软件报告在系统⽂件夹中⽣成asp_co de.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⼀下;如何生成webservice客户端
第⼀:对⽬标类库点击右键,如图六:
第⼆:点击“添加服务引⽤”如图⼋:
关键是图左下⾓的“⾼级”按键。点击如图九:
第三:注意了,同样是左下⾓,“添加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服务,不要选择新建”-“⽹站”,在对话框中选
择“www.doczj/doc/cf1627728.html
Web服务”)
在web service中如何得到客户端IP,
通过代理,获取真实的ip
if(Context.Request.ServerVariables["HTTP_VIA"]!=null)
{
ip=Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); }
else
{
ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
C#WinForm利⽤Web Service API查询数据库并显⽰到客户端
我们知道C#的Web Service API的返回值可以是DataSet类型,这就使得我们可以通过Web Service API来查询数据库,这个功能将成为我们许多应⽤的基础。下⾯我们⽤⼀个简单的Winform调⽤的例⼦来说明这个问题。
⾸先我们有⼀个SQL Server2000数据库book在服务器webserviceserver上,book库中有张表bookinfo,包含书名、作者、价格等字段,数据库⽤户sa,密码123456。我们利⽤VS2005创建⼀个Web Service项⽬并发布出去,这⾥不再详述如何建⽴和发布,如有不清楚的地⽅请参阅相关资料。也可以参考我的另两篇⽂章:
www.doczj/doc/cf1627728.html
/cattiger75/archive/2007/10/17/1828896.aspx(如何创建和发布WEB SERVICE)
www.doczj/doc/cf1627728.html
/cattiger75/archive/2007/10/19/1832803.aspx(C#WINFORM⾥如何调⽤WEB Service API)
我们在项⽬的Service.cs⾥编写⼀个查询数据库的API,为了简化问题,我们编写的这个API只接受⼀个字符串参数,⽤来在书名字段做前⽅匹配的查询,返回⼀个DataSet,这个DataSet中包含⼀个名为bookinfo的DataTable,bookinfo中含有书名、作者和价格字段,代码如下:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data .SqlClient;
[WebService(Namespace = www.doczj/doc/cf1627728.html
/)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
//定义⼀个sqlconnection连接成员
SqlConnection sqlconn = new SqlConnection("Server=webserviceserver;Initial Catalog =book;uid=sa;pwd=123456");//貌似必须⽤sa⽅式登陆啊
public Service () {
//如果使⽤设计的组件,请取消注释以下⾏
//InitializeComponent();
}
[WebMethod]
public string HelloWorld() {
return "欢迎使⽤我的WEB服务!";
}
[WebMethod]
public DataSet searchBook(string bookname)
{
sqlconn.Open();
string sql = "select top 50 书名,作者,价格 from bookinfo where 书
名 like '" + bookname + "%' order by id desc";
SqlDataAdapter da = new SqlDataAdapter(sql, sqlconn);
DataSet ds = new DataSet();
da.Fill(ds,"bookinfo");
return ds;
}
}
编写好后将Web Service发布出去。
现在我们来建⽴⼀个winform的Windows应⽤程序项⽬,并在项⽬中将我们刚刚发布的WEB Service做为⼀个WEB引⽤添加进来。
在项⽬窗体中创建⼀个textbox控件⽤来输⼊查询内容,⼀个名为btnBookSearch的查询button,⼀个DataGridView控件⽤来绑定获得的dataset。双击查询button编写如下事件处理函数。
private void btnBookSearch_Click(object sender, EventArgs e)
{
//定义⼀个Web Service对象,WebReference是我们添加WEB引⽤时取的名称 WebReference.Service ws = new
cqust.libmanage.WebReference.Service();
this.dataGridViewBookInfo.AutoGenerateColumns = true;
//将返回的dataset绑定到datagridview上
this.dataGridViewBookInfo .DataSource = ws.BoxSearchString.Text );
//指定显⽰的datatable
this.dataGridViewBookInfo.DataMember = "bookinfo";
}
编译项⽬并⾏,你将会在datagridview中看到查询的结果。
我们的例⼦⾮常简单,没有考虑诸如异常捕获、异步调⽤、安全性等问题,但是它说明了利⽤Web Service API查询数据库是⾮常简单的,通过对这个简单API的扩展,你可以实现⾮常复杂的数据库查询。
C/S框架-发布和部署WebService
⼀、C/S框架-WebService部署图
如下图所⽰,C/S框架由Client端及WebServer端组成。客户端引⽤WebService接⼝(可以在
CSFramework_Client.fig⽂件内配置引⽤地址)。服务端(WebServer)建⽴在传统的IIS服务器之上。服务端就是⼀个⽹站,提供⼀组服务接⼝给客户端调⽤,如客户端请求频繁负荷较⼤的情况下建议WebServer与数据库服务器分离。
⼆、发布WebService
1.Begin Publish Website.
2.选择发布的⽬录(作为⽹站的虚拟⽬录)
3.Publish Succeeded.
4.查看已发布的⽂件.
5.新建⽹站(WebServer).
6.输⼊⽹站名称.
7.将⽹站虚拟⽬录设置为刚才发布的⽬录.
8.设置⽹站访问权限.
9.⽹站虚拟⽬录创建成功.
10.查看新建的⽹站.
11.游览⽹站内容.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。