C#中调用Web Service.docx
《C#中调用Web Service.docx》由会员分享,可在线阅读,更多相关《C#中调用Web Service.docx(25页珍藏版)》请在冰豆网上搜索。
C#中调用WebService
如何创建和发布WebService
WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用、ASP.NETWebForm程序、甚至其他语言的客户端,都可以与同一个WEB服务通信,其平台和语言无关性使其有了广阔的发展空间。
利用VS2005和IIS我们可以很容易地发布一个WEBSERVICE,因为其中有几个细节需要注意,所在初学者常常在这里出现问题,现通过一个简单的例子说明如何创建和发布一个WEBSERVICE。
环境:
WindowsServer2003,.Net FrameWork2.0,IIS6.0
工具:
VS2005
1.首先VS2005中新建一个WEB服务项目。
打开“文件”-“新建”-“网站”,在对话框中选择“ASP.NETWeb服务”,VS2005会自动生成一个Service.cs文件,包含如下代码:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http:
//tempuri.org/")]
[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运行此页面,同时也可以设置断点进行调试(前提是要将web.config中设为true,而实际项目运行中,则改为false)
2.生成网站
很简单,“生成”-“生成网站”或直接Shift+F6
3.发布网站
也是简单,“生成”-“发布网站”,这里会弹出一个对话框,什么也不需要修改,记下发布的目录。
比如:
D:
\我的文档\VisualStudio2005\Projects\WebSite1\PrecompiledWeb\WebSite1,我们需要目录下的文件。
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引用,如下图二.
第三:
查找可用的webservice,如果是本解决方案内的直接搜索就行,如果是外部的,就输入有效地址然后查询,这里面可以测试webservice,如图三:
第四:
添加引用成功后就会出现WebReferences目录.如图四,然后就是调用了。
这应该就是最基本的添加webservice引用的方法了。
当时我也是按照这样的思路去添加。
发现类库中点击右键并没有出现我熟悉的“添加web引用”,而出现图五效果:
此时我认为可能是升级的原因变成"添加服务引用",接下来的操作和上面操作相同.点击出现图六;
输入webservice地址,测试连接都成功,添加成功后出现图七:
然而调用的时候并不像想像的那么成功,结果可想而之,我添加的WCF服务。
这里错误代码我就不好意思帖了。
知道引用对象错了后,就是让类库来添加webservice,然而点击类库后,右键并没有"添加web服务"的选项。
如何让类库支持添加webservice引用成了我最大的难题。
此时我咨询了同事,基本排除程序问题,因为通过网站形式可以正常访问webservice。
园子里的朋友你们在VS08中的类库会添加webservece引用吗?
我搜索了一下午,毫无结果,最好只好再问别的同事,几经周折,我把方法贴出来show一下;
第一:
对目标类库点击右键,如图六:
第二:
点击“添加服务引用”如图八:
关键是图左下角的“高级”按键。
点击如图九:
第三:
注意了,同样是左下角,“添加WEB引用”的按钮终于出现了,点击如图十:
之后的操作就不多说了。
到这里,就最终完成了C#的类库中添加WebService引用的目的。
操作并不复杂,只是实在是想不明白,VS为什么要把添加web引用放的这么隐蔽呢,难道是为了WCF的推广?
而在项目中实际调用时这样写:
SerRef.Servicews=newSerRef.Service();//SerRef是web引用名。
stringsst=ws.HelloWorld();//HelloWorld是服务方法。
若是后来重新对服务进行添加了新的服务方法,注意别忘了点击服务别名,右键—》“更新web引用”。
运行项目时若出现类似“权限。
。
”的错误时,请按照给出的提示(vs2008中会有建议操作的,点下就ok了)更正。
好像在调试过程中不能在调用方法时单步调试。
上面是发布与调用web服务,而WCF服务是类似的(建立是应选择WCF服务,不要选择新建”-“网站”,在对话框中选择“ASP.NETWeb服务”)
在webservice中如何得到客户端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利用WebServiceAPI查询数据库并显示到客户端
我们知道C#的WebService API的返回值可以是DataSet类型,这就使得我们可以通过WebServiceAPI来查询数据库,这个功能将成为我们许多应用的基础。
下面我们用一个简单的Winform调用的例子来说明这个问题。
首先我们有一个SQLServer2000数据库book在服务器webserviceserver上,book库中有张表bookinfo,包含书名、作者、价格等字段,数据库用户sa,密码123456。
我们利用VS2005创建一个WebService项目并发布出去,这里不再详述如何建立和发布,如有不清楚的地方请参阅相关资料。
也可以参考我的另两篇文章:
SERVICE)
ServiceAPI)
我们在项目的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 =
[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;
}
}
编写好后将WebService发布出去。
现在我们来建立一个winform的Windows应用程序项目,并在项目中将我们刚刚发布的WEBService做为一个WEB引用添加进来。
在项目窗体中创