.NET的Web服务的创建,部署,运用

项目要求:(简单点讲)
1,客户端通过网络站点上传的XML,XML的文件在网络站点首先解析成集,所以上传给Web服务只是集,你也可以上传的XML文件到Web服务的服务器,这里以前者为例。
2,Web服务接收客户端传来的数据集,将数据集插入到数据库。
3,客户端查询,通过网站引用,查询结果返回客户端。

-------最先要解决的问题是你要阅读和了解Web服务相关的知识------
第一步:创建你的web服务,打开VS2005 ---新建网站----天冬氨酸的。Net Web服务---确定
第二步:网站自动给你生成了一个asmx文件文件----现在你就可以运行这个简单的Web服务,之后你就可以看到那个“世界您好”。
           
第一步:创建你的网站,就是asp.net站点
/ /当然开发前,你可以先不新建asp.net站点,我就直接在Web服务的本地操作,我觉得这样比较好。

1:【上传功能】
第一步:在你的网络站点拖入一个上传控件文件上传,这个控件的作用就是选择本地的XML的文件,在本地转化为数据集,你要传给web服务的是数据集。具体代码如下:
//=================客户端上传的XML文件====================
保护无效btnUpload_Click(对象发送,EventArgs五)

/ / fullfileName获得全路径
字符串fullfileName = this.fileUpload.PostedFile.FileName;
/ /获得文件名
文件名= fullfileName.Substring(fullfileName.LastIndexOf(“\ \”)+ 1);
/ /文件类型
字符串的文件类型= fullfileName.Substring(fullfileName.LastIndexOf (".") + 1);
如果(this.fileUpload.PostedFile.FileName =空)

如果(fileType.ToLower()==“XML”的)

集副=新DataSet();
ds.ReadXml(fullfileName);

/ /调用web服务中的方法。
myService.getXml(副局长);

/ /成功后提示,代码省略

其他的

/ /失败后提示,代码省略


其他的

this.lblMessage.Text =“请选择你要上传的文件,谢谢!”;


你在站点上上传了一个数据集,所以web服务就要有一个方法来接收它,代码如下:
//================上传的XML文件===================
[Webme山od]
公共布尔getXml(集数据集)
/ /公共集getXml(集数据集)

/ /连接数据库,这里面随你怎么连接数据库,只要能连上就可以了。
数据库分贝=新的DB();
SQL连接节能= db.sqlCon();
con.Open();

集c_dataSet =新DataSet();
      
/ /将用户传过来的数据集赋值给c_dataSet。
c_dataSet =数据集;
      
/ /这里调用了存储过程。
/ /读者只要将sp_MVP改为选择纹波,其它的照例,不用存储管理的话把蓝色那行都删掉*。
SqlDataAdapter SDA的=新SqlDataAdapter(“sp_MVP”,节能);
sda.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder的mysqlcommand =新SqlCommandBuilder的(SDA)的;
sda.Update(c_dataSet,的“MVP”);

SqlDataAdapter sda1 =新SqlDataAdapter(“sp_OtherCompetencies”,节能);
sda1.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder的mysqlcommand1 =新SqlCommandBuilder的(sda1);
sda1.Update(c_dataSet,“OtherCompetencies”);

SqlDataAdapter sda2 =新SqlDataAdapter(“sp_OtherCompetency”,节能);
sda2.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder的mysqlcommand2 =新SqlCommandBuilder的(sda2);
sda2.Update(c_dataSet,“OtherCompetency”);

SqlDataAdapter sda3 =新SqlDataAdapter(“sp_Publications”,节能);
sda3.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder的mysqlcommand3 =新SqlCommandBuilder的(sda3);
sda3.Update(c_dataSet,“出版物”);

SqlDataAdapter sda4 =新SqlDataAdapter(“sp_Publication”,节能);
sda4.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder的mysqlcommand4 =新SqlCommandBuilder的(sda4);
sda4.Update(c_dataSet,“出版”);

/ /处理所以的请求(更新)。
c_dataSet.AcceptChanges();

con.Close();
返回true;

首先要在web服务服务器建立数据库,有五张表纹波,OtherCompetencies ......这里web服务要连接数据库了,这里是连接sql2005,为O(∩_∩)岛..哈哈,我相信这里连接数据库会让你很郁闷的,实在没辙了来找我,^ _ ^
现在就可以试试效果了!当然不可以一下就能成功,多调试!

2:[查询功能]
查询是在web服务里面实现的,代码如下:
//=================用户查询=====================
[Webme山od]
/ /公共集searchData(字符串mvpguid,串fristname,串姓氏)
公共数据集searchData(字符串mvpguid)

/ /连接数据库
DB数据库=新的DB();
SQL连接节能= dataBase.sqlCon();
con.Open();

/ /用户查询得到的将是myDataSet。
集myDataSet =新DataSet();
尝试

SqlDataAdapter myAdapter =新SqlDataAdapter();

如果(mvpguid!=“”)

/ /按照用户输入的mvpguid进行查询。
myAdapter.SelectCommand =新的SqlCommand(“选择纹波*如MVPGUID ='”+ mvpguid +"'",节能);
SqlCommandBuilder的myCB =新SqlCommandBuilder的(myAdapter);
myAdapter.Fill(myDataSet,的“MVP”);

/ /建立表间关系。
SqlDataAdapter myAdapter1 =新SqlDataAdapter(“选择OtherCompetencies.OtherCompetencies_Id,从纹波,OtherCompetencies OtherCompetencies.MVP_Id其中MVP.MVP_Id = OtherCompetencies.MVP_Id和MVP.MVPGUID ='”+ mvpguid +“'”,节能);
SqlCommandBuilder的myCB1 =新SqlCommandBuilder的(myAdapter1);
myAdapter1.Fill(myDataSet,“OtherCompetencies”);

SqlDataAdapter myAdapter2 =新SqlDataAdapter(“选择OtherCompetency.OtherCompetencies_Id,从纹波,OtherCompetencies,OtherCompetency OtherCompetency.OtherCompetency_Text其中MVP.MVP_Id = OtherCompetencies.MVP_Id和OtherCompetencies.OtherCompetencies_Id = OtherCompetency.OtherCompetencies_Id和MVP.MVPGUID ='”+ mvpguid +“'” ,节能);
SqlCommandBuilder的myCB2 =新SqlCommandBuilder的(myAdapter2);
myAdapter2.Fill(myDataSet,“OtherCompetency”);

SqlDataAdapter myAdapter3 =新SqlDataAdapter(“选择Publications.Publications_Id,从出版,脑膜炎Publications.MVP_Id其中MVP.MVP_Id = Publications.MVP_Id和MVP.MVPGUID ='”+ mvpguid +“'”,节能);
SqlCommandBuilder的myCB3 =新SqlCommandBuilder的(myAdapter3);
myAdapter3.Fill(myDataSet,“出版物”);

SqlDataAdapter myAdapter4 =新SqlDataAdapter(“选择Publication.Publications_Id,Publication.Id,Publication.Title,Publication.Publisher,Publication.DatePublished,Publication.Abstract,从纹波,出版,出版物Publication.UrlLink其中MVP.MVP_Id = Publications.MVP_Id和Publications.Publications_Id = Publication.Publications_Id和MVP.MVPGUID ='“+ mvpguid +”'“,节能);
SqlCommandBuilder的myCB4 =新SqlCommandBuilder的(myAdapter4);
myAdapter4.Fill(myDataSet,“出版”);

/ /创建的DataRelation,并将其添加到DataSet。
DataRelation的医生=新的DataRelation(“MVPToOtherCompetencies”,myDataSet.Tables [的“MVP”]。专栏[“MVP_Id”],

myDataSet.Tables [“OtherCompetencies”]。专栏[“MVP_Id”]);
DataRelation的dr1 =新的DataRelation(“OtherCompetenciesToOtherCompetency”,myDataSet.Tables [“OtherCompetencies”]。列

[“OtherCompetencies_Id”],myDataSet.Tables [“OtherCompetency”]。专栏[“OtherCompetencies_Id”]);
DataRelation的DR2基因=新的DataRelation(“MVPToPublications”,myDataSet.Tables [的“MVP”]。专栏[“MVP_Id”],myDataSet.Tables

[“刊物”]。专栏[“MVP_Id”]);
DataRelation的DR3的=新的DataRelation(“PublicationsToPublication”,myDataSet.Tables [“刊物”]。专栏[“Publications_Id”],

myDataSet.Tables [“出版”]。专栏[“Publications_Id”]);
           
/ /获取或设置一个指示的DataRelation对象是否嵌套的值。
dr.Nested =真;
dr1.Nested =真;
dr2.Nested =真;
dr3.Nested =真;
           
/ /创建关系到集合中
myDataSet.Relations.Add(博士);
myDataSet.Relations.Add(dr1);
myDataSet.Relations.Add(DR2基因);
myDataSet.Relations.Add(DR3的);


捕获(SqlException异常)

返回DataError(例外);

返回myDataSet;

//====================错误信息=======================
公共数据集DataError(异常前)

集errDS =新DataSet(“错误”);
DataTable的errTable = errDS.Tables.Add(“错误”);
errTable.Columns.Add(“信息”);
errTable.Rows.Add(新对象[](ex.Message));
返回errDS;

代码有点多,呵呵,然后你在客户端只要引用它的接口就可以了,这样会更好理解一点,代码如下:
//====================客户端查询函数=====================
保护无效btnSearch_Click1(对象发送,EventArgs五)

字符串c_mvpGuid =“”;
尝试

c_mvpGuid = this.txtByMVPGUID.Text.ToString();

/ / getDataSet对象获得查询返回的副秘书长。
集getDataSet = myService.searchData(c_mvpGuid);
  
/ / /查询默认显示为纹波表。测试的时候在index.aspx页面上显示。
this.dgResult.DataSource = getDataSet.Tables [的“MVP”]。的DefaultView;
this.dgResult.DataBind();

捕获(异常前)

扔前;


要是有什么不懂的地方,你可以留言,我会给你答复。^ _ ^
呵呵,忘了一件事,如果你用自己的XML的文件,自己的数据库,那就没事了,不是的话看看:
“?XML版本=”1.0“编码=”UTF - 8的“?”
<MVPData>
<MVP>
<MVPGUID> f8433e20 - c9af - 4b48 - 9c83 - 2fc235393f31“/ MVPGUID”
<FirstName>拉斐尔安德拉达“/名字”
<LastName> [McPegasus]“/姓氏”
<Photo>
“/图片”
<Bio>
“/生物”
<StartAnivDate> 02年10月1日上午12时00分00秒“/ StartAnivDate”
<Subsidiary>西班牙“/下属”
<Region> EMEA地区“/区”
<Certifications>
“/认证”
<语言西班牙语“/语言”
<产品介绍>的Microsoft Office Access“/产品”
<KbTitle>社区解决方案知识库文章写的拉斐尔安德拉达[McPegasus]“/ KbTitle”
<KbUrl> http://support.microsoft.com/search/default.aspx?Queryc=kbpubmvpKbUrl“
<OtherCompetencies>
<OtherCompetency>微软Office FrontPage中“/ OtherCompetency”
“/ OtherCompetencies”
<SpeakingEngagements>
“/ SpeakingEngagements”
<Publications>
<发布
<标识db845d0e - 1e66 - 474e - a6c8 - 5f8a8225c703“/身份证”
<标题> http://ava4os.webcindario.com“/标题”
<Publisher />
<DatePublished />
<Abstract />
<UrlLink> http://ava4os.webcindario.com“/ UrlLink”
“/刊物>”
“/刊物>”
<Conferences>
“/会议”
“/纹波”
<MVP>
..........
“/纹波”
“/ MVPData”

web服务可不可以脱离IIS中运行
答案是肯定的。
接触Web服务不到两个星期,感觉实现一个web服务真的是其乐无穷!我想说的是:你遇到的错误越多,学的东西也越多。
/ / / /这里先说在没有IIS的的情况下,实现站点对Web服务的服务的引用。

如果你知道怎么新建(添加)解决方案的话就确定了,要是不知道的话,当你关闭你的网站或者服务的话会提示你保存解决方案。默认的解决方案保存在
ç:\ Documents和Settings \用户名\我的文档\ Visual Studio 2005的\项目\'你的解决方案'
第一步:打开你的Web服务,网站。

第二步:运行你的Web服务,当出现了有web服务方法界面的时候,请不要关闭浏览器(IE)中,复制浏览器的地址:如http://localhost:1516/WebServices/myService.asmx

第三步:这个时候如果你以前的网站访问web服务的方式是在建立在入境上的话,那可能要更新你的网站引用了,最好是删除你以前的网站引用把,^ _ ^

第四步:添加网站引用,出现了一个对话框,这个时候你找
此解决方案中的网络服务
本地计算机上的网络服务
都可能找不到,还记得第二步的那个复制把,把复制的那个地址粘贴到对话框的网址里面,点击前往,这样就一定能找到了。估计很多人都不知道把!

第五步:现在通过你的网站调用web服务上的服务看看效果把!

/ / / /接下来把你的web服务,网站放在入境下面看看,步骤差不多,自己慢慢尝试。

转载于:https://www.cnblogs.com/guoqiao/archive/2009/12/17/1626713.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值