C#中调用Web Service要点.docx

上传人:b****1 文档编号:13402283 上传时间:2023-06-13 格式:DOCX 页数:29 大小:676.33KB
下载 相关 举报
C#中调用Web Service要点.docx_第1页
第1页 / 共29页
C#中调用Web Service要点.docx_第2页
第2页 / 共29页
C#中调用Web Service要点.docx_第3页
第3页 / 共29页
C#中调用Web Service要点.docx_第4页
第4页 / 共29页
C#中调用Web Service要点.docx_第5页
第5页 / 共29页
C#中调用Web Service要点.docx_第6页
第6页 / 共29页
C#中调用Web Service要点.docx_第7页
第7页 / 共29页
C#中调用Web Service要点.docx_第8页
第8页 / 共29页
C#中调用Web Service要点.docx_第9页
第9页 / 共29页
C#中调用Web Service要点.docx_第10页
第10页 / 共29页
C#中调用Web Service要点.docx_第11页
第11页 / 共29页
C#中调用Web Service要点.docx_第12页
第12页 / 共29页
C#中调用Web Service要点.docx_第13页
第13页 / 共29页
C#中调用Web Service要点.docx_第14页
第14页 / 共29页
C#中调用Web Service要点.docx_第15页
第15页 / 共29页
C#中调用Web Service要点.docx_第16页
第16页 / 共29页
C#中调用Web Service要点.docx_第17页
第17页 / 共29页
C#中调用Web Service要点.docx_第18页
第18页 / 共29页
C#中调用Web Service要点.docx_第19页
第19页 / 共29页
C#中调用Web Service要点.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C#中调用Web Service要点.docx

《C#中调用Web Service要点.docx》由会员分享,可在线阅读,更多相关《C#中调用Web Service要点.docx(29页珍藏版)》请在冰点文库上搜索。

C#中调用Web Service要点.docx

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引用添加进来。

在项目窗体中创建一个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.searchBook(this.textBoxSearchString.Text);

            //指定显示的datatable

            this.dataGridViewBookInfo.DataMember = "bookinfo";

        }

编译项目并行,你将会在datagridview中看到查询的结果。

我们的例子非常简单,没有考虑诸如异常捕获、异步调用、安全性等问题,但是它说明了利用WebServiceAPI查询数据库是非常简单的,通过对这个简单API的扩展,你可以实现非常复杂的数据库查询。

C/S框架-发布和部署WebService

一、C/S框架-WebService部署图

如下图所示,C/S框架由Client端及WebServer端组成。

客户端引用WebService接口(可以在CSFramework_Client.WebServices.dll.config文件内配置引用地址)。

服务端(WebServer)建立在传统的IIS服务器之上。

服务端就是一个网站,提供一组服务接口给客户端调用,如客户端请求频繁负荷较大的情况下建议WebServer与数据库服务器分离。

二、发布WebService

1.BeginPublishWebsite.

2.选择发布的目录(作为网站的虚拟目录)

3.PublishSucceeded.

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.

三、数据库连接配置

因开发环境中使用SQLExpress2005数据库,SQL授权方式为:

IntegratedSecurity=True;

当发布WebService后需要更改连接字符串:

UserID=sa;password=csframework;使用SQL授权登录。

(貌似只能用sa用户名登陆,反正用windows方式登陆不可以)

开发环境:

ConnectionString-IDE="server=.\SQLEXPRESS;AttachDbFileName='D:

\MySourceCode\CSharp\CSFramework-WebService-CHT-正式版\source.client\debug\Database\CS_WebServiceII.mdf';IntegratedSecurity=True;"

正式环境:

ConnectionString="server=.\SQLEXPRESS;UserID=sa;password=csframework;AttachDbFileName='D:

\MySourceCode\CSharp\CSFramework-WebService-CHT-正式版\source.client\debug\Database\CS_WebServiceII.mdf';"

17.当客户端无法连接服务端时跟踪程序出错解决方案:

Loginfailedforuser'sa'.TheuserisnotassociatedwithatrustedSQLServerconnection

1。

出现这个问题的一个原因是sqlserver没有启用混合登录模式,可在数据库属性更改登录模式为Windows验证和用户验证混合模式,更改模式后一定要重启sqlserver服务器

2。

另一个可能的原因是根本就不存在这个用户,新建该用户即可解决登录问题。

18.打开SQLExpress或SQL2005/2008EnterpriceVersion,在服务器树结点右键打开"Properties"窗体.

19.更改登录模式为Windows验证和用户验证混合模式.

20.SQLServerConfigurationManager.

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.!

usingsystem;

usingsystem.reflection;

usingsystem.web.services.description;

usingmicrosoft.csharp;

usingsystem.codedom;

usingpiler;

usingsystem.io;

usingsystem.text;

usingsystem.xml;

using;

usingwebserviceproxy;

namespacewebserviceproxy

{

   publicclasswebserviceproxy

   {

       privateassembly_ass=null;              

       privatestring_protocolname="soap";     

       privatestring_srcwsproxy=string.empty;

       publicassemblyassembly{get{return_ass;}}

       publicstringprotocolname

       {get{return_protocolname;}set{_protocolname=value;}}

       publicstringsrcwsproxy{get{return_srcwsproxy;}}

       publicwebserviceproxy()

       {

       }

       publicwebserviceproxy(stringwsdlsourcename)

       {

           assemblyfromwsdl(getwsdl(wsdlsourcename));

       }

       publicstringwsdlfromurl(stringurl)

       {

           webrequestreq=webrequest.create(url);

           webresponseresult=req.getresponse();

           streamreceivestream=result.getresponsestream();

           encodingencode=system.text.encoding.getencoding("utf-8");

           streamreadersr=newstreamreader(receivestream,encode);

           stringstrwsdl=sr.readtoend();

           returnstrwsdl;

       }

       publicstringgetwsdl(stringsource)

       {

           if(source.startswith("

xmlversion")==true)

           {

               returnsource;             

           }

           else

               if(source.startswith("http:

//")==true)

           {

               returnwsdlfromurl(source);  

           }

           returnwsdlfromfile(source);  

       }

       publicstringwsdlfromfile(stringfilefullpathname)

       {

           fileinfofi=newfileinfo(filefullpathname);

           if(fi.extension=="wsdl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2