最简单的webservice如何写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简单的webservice如何写相关的知识,希望对你有一定的参考价值。

在开始下面这个例子之前,你的系统需要:
1、WIN2000 + IIS;
2、VS.Net;
3、SQL Server(我这里用的是SQL数据库);

这个Web Service的例子用的是MS大吹的C#写的,如果你喜欢VB,那么用VB也是一样的哦,只不过语法上一些小的差别而已,道理都是一样的,不过即然MS都鼓吹C#,如果你能够用C#写还是用这为好哦。

下面是写的步骤:

一、打开VS。NET的集成开发环境,FILE菜单上选择New,新建一个C#的ASP.NET Web Service工程,工程名为WebServiceDemo(完整的是http://localhost/WebServiceDemo)。这是VS就在你的Web系统目录下生成了相应的文件,我的服务目录是默认的c:\Inetpub\wwwroot,生成的文件就在c:\Inetpub\wwwroot\webserviceDemo下,就不多说了。

二、打开与生成工程对应的C#源文件,这里是Service1.asmx.cs,VS.Net集成环境已经为你生成了相应的代码如下:
// =============================================================================
// 文件: Service1.asmx.cs
// 描述: 架构一个Web Service来对数据库进行互访
//
//
// ============================================================================

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;

// 系统生成了与工程名相同的命名空间
namespace WebServiceDemo

/// <summary>
/// Summary description for Service1.
/// </summary>
// 所有的WEB服务都是派生于System.Web.Services.WebService的。
public class Service1 : System.Web.Services.WebService

public Service1()

//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();




里面我添加了文件说明和相应的注释,接下来就是在里面编写相应的服务代码了。这里我想先把对数据库的操作封装在同一命名空间的单独的一个类里,下面编写WEB方法时只用接调用这个类中的相应方法就可以了。下面是我写的这个类的代码:

// -------------------------------------------------------------------------
// 构建一个新类,用于对数据的访问
// -------------------------------------------------------------------------
public class DataAccess

// 连接字符串成员变量
private string m_szConn = "";
private SqlConnection m_sqlConn;
private SqlDataAdapter m_sqlDa;
// 构造函数
public DataAccess(string szConnectionString)

m_szConn = szConnectionString;

// 返回一个记录集
public DataSet GetDataset(string szCommandText)

DataSet sqlDs;

try

m_sqlConn = new SqlConnection(m_szConn);
m_sqlConn.Open();
m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn);
sqlDs = new DataSet();
m_sqlDa.Fill(sqlDs);
m_sqlConn.Close();
return sqlDs;

catch

return null;


// 重载上述方法
public DataSet GetDataset(string szCommandText, string szTableName)

DataSet sqlDs;

try

m_sqlConn = new SqlConnection(m_szConn);
m_sqlConn.Open();
m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn);
sqlDs = new DataSet();
m_sqlDa.Fill(sqlDs,szTableName);
m_sqlConn.Close();
return sqlDs;

catch

return null;




这些就不多说了,与创建一般的C#类是一样的。类中有三个函数,其中一个为构造函数,调用时传入连接字符串。另外两个函数都是一样的作用,返回用户需要的记录集,只不是调用时传的参数不一样,实质都是一样的。

下面就是在Service1类中添加真正用于WEB调用的代码了,这部分才是给WEB应用程序调用的东西。在编写这个类的代码之前,应该先申请一个服务命令空间,设置相应的属性,这一句可万万不能少哦,呵呵~,它告诉了WEB服务存放的路径等相关的信息。如下:
// 声明一个服务空间
[WebService(
Namespace = "http://localhost/WebServiceDemo/", //其实这个才是最重要的啦~,其它的都可以不要哦
Name = "Web Service Demo",
Description = "Web Service Demo"
)]
下面是Service1的代码:

public class Service1 : System.Web.Services.WebService

public Service1()

//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();


#region Component Designer generated code

//Required by the Web Services Designer
private IContainer components = null;

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()



/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )

if(disposing && components != null)

components.Dispose();

base.Dispose(disposing);


#endregion

// 连接字符串常量
const string szConn = "server=(local)\\taoyi;uid=sa;pwd=;"
+ "initial catalog=mydata;data source=taoyi";

[WebMethod]
public String About()

return "这是一个C#编写的Web Service演示程序!";


// 返回其中一个WebServiceDemo表
[WebMethod]
public DataSet GetServiceDemoTable()

DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
string szSql = "Select * From WebServiceDemo";
sqlDs = dataAcc.GetDataset(szSql,"Demo");

return sqlDs;

// 返回由用户指定的查询
[WebMethod]
public DataSet GetByUser(string szCommandText)

DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
sqlDs = dataAcc.GetDataset(szCommandText);

return sqlDs;


是不是很简单哦,就只这么点,呵呵~,不过也可以说明问题的了。这个类中声明了三个WEB方法,有没有发觉呢?每个方法的前面都加了[WebMethod],表示该方法为WEB方法。呵呵,如果你想要你写的函数可以让WEB应用程序调用的话,这个可不能少的啦~,不然WEB应用程序就无法调用的。

到此一个WEB服务就完成了,点击运行看看,如果没什么错的话,就会出现如下的WEB页面服务描述:

Service1

The following operations are supported. For a formal definition, please review the Service Description.

* GetByUser

* GetServiceDemoTable

* About

.....(下面还有很多)

其中代星号的就是先前在函数前加了[WebMethod]的函数。在出现在页面中你可以单击相应的函数,然后就会跳到调用页面,你可以在相应的文本框中(如果函数有参数的话)输入相应的参数,点而调用按钮,那么就可以看到函数返回的结果了(前提是函数调用无错的话),不过全是XML格式的文本。比如我的GetServiceDemoTable函数调用的结果如下:

<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://tempuri.org/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="Demo">
- <xs:complexType>
- <xs:sequence>
<xs:element name="ID" type="xs:int" minOccurs="0" />
<xs:element name="szUser" type="xs:string" minOccurs="0" />
<xs:element name="szSex" type="xs:string" minOccurs="0" />
<xs:element name="szAddr" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Demo diffgr:id="Demo1" msdata:rowOrder="0">
<ID>1</ID>
<szUser>taoyi</szUser>
<szSex>男</szSex>
<szAddr>四川泸州</szAddr>
</Demo>
- <Demo diffgr:id="Demo2" msdata:rowOrder="1">
<ID>2</ID>
<szUser>xiner</szUser>
<szSex>女</szSex>
<szAddr>四川宜宾</szAddr>
</Demo>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

到此为至,Web Service程序就已经算是完成了。

下面要做的是写一个WEB应用程序来测试我写的这个Web Service了,看看能不能达到想要的结果。建立Web应用程序的步骤如下:

一、新建一个ASP.Net Web Application工程,与创建Web Service的第一步一样,只是工程类型不一样罢了。我这里工程名为WebServiceDemoTest,完整的为http://localhost/WebServiceDemoTest,系统就在相应的目录(c:\Inetpub\wwwroot\WebserviceDemoTest)下生成了所需文件。
二、在设计视图下打开WebForm1.aspx文件,在里面放置一个panel容器,为了达到测试的目的,我们需要三个服务端按钮和一个服务端文本框,分别调用我们在Web Service中写的三个函数,另外,为了展示调用方法所得达的数据,还需要一个服务端标签控件和一个DataGrid控件。页面的布置就随便你了,想怎么放置就怎么放置,只要能达到演示的目的就行。
三、引用先前写的Web Service程序,菜单步骤如下project->add web reference...,然后输入我们Web Service的路径,这里是http://localhost/WebServiceDemo/Service1.asmx,点击添加就OK了。这时你将在类视图中看到localhost命名空间了。
四、编写测试代码。

为了便于后面少写些代码,如(xxxx.xxxx.xx xx = new xxxx.xxx.xx()这种),那么首先你得引用localhost命名空间的service1类,以后直接写xxxx xx = new xxxx()就可以了。
下面是几个按钮的代码:

// 测试GetServiceDemoTable()
private void Button2_Click(object sender, System.EventArgs e)

DataSet ds = new DataSet();
Service1 oService = new localhost.Service1();

// 返回记录集
ds = oService.GetServiceDemoTable();
if (ds != null)

// 显示记录集的记录
DataGrid1.DataSource = ds.Tables["Demo"];
DataGrid1.DataBind();

else

this.Response.Write("加载数据错误!");


// 测试GetByUser()
private void Button1_Click(object sender, System.EventArgs e)

DataSet ds = new DataSet();
Service1 oService = new localhost.Service1();
String szCommand = TextBox1.Text;

ds = oService.GetByUser(szCommand);
if (ds != null)

DataGrid1.DataSource = ds;
DataGrid1.DataBind();

else
Response.Write("错误!有可能是SQL命令有问题!");

// 测试About()
private void Button3_Click(object sender, System.EventArgs e)

Service1 oService = new localhost.Service1();
Label1.Text = oService.About();


OK,最后就是运行了,如果一切OK,点击第一个按钮得到的将是在一个包函用户执行的SQL命令的表结果。第二个按钮得到的就是上面运行Web Service时的GetServiceDemoTable得到的XML描述,即
ID szUser szSex szAddr
1 taoyi 男 四川泸州
2 xiner 女 四川宜宾
点击第三个按钮,则在Label1中显示"这是一个C#编写的Web Service演示程序!”的字符串
参考技术A 1.系统条件:
  Eclipse Java EE IDE for Web Developers
  Java SE 6
  Windows XP
  2.基本环境搭建:
  1)Java SE6 JDK的安装:下载Java SE6 JDK,双击,安装默认选项进行安装即可。
  2)Eclipse的安装与配置:
  安装时直接解压。
配置处有两点,Window>Preferences>Java>Installed JREs确保如下设置:

  安装路径可能略有不同。
  Window>Preferences>Java>Compiler 确保如下设置:
  
  3.建立Server端工程和相关包与类:
  创建一个Java Project,命名为wsServerHelloWorld:
  
  在这个项目下建立包:org.gnuhpc.wsServer

  在这个包下边建立类:SayHello

  在SayHello.java文件中输入以下代码:
  package org.gnuhpc.wsServer;
  import javax.jws.WebService;
  @WebService
public class SayHello
private static final String SALUTATION = "Hello";
  public String getGreeting(String name)
return SALUTATION + " " + name;


  其中注意到@WebService ,这个称作annotation或者metadata,Java SE 5中的Web Services Metadata Specification引入的。Java SE 6中对于Web Services规范的升级以及JAX-WS(Java API for XML Web Services)2.0规范,这些升级使得我们Web Services的创建和调用变得更加容易。使用这些新功能,我们可以仅仅使用简单的Annotations注释从一个Java类创建Web Services。开发者将其类和方法之前用该annotations指定,类告诉runtime engine以Web Service的方式和操作来使能该类和方法。这个annotations可以产生一个可布署的Web Service,是一个WSDL映射annotations,将Java源代码与代表Web Service的WSDL元素连接在了一起。

C#最简单最完整的webservice实例

我做java,但最近接触crm所以必须研究一下C#中的webservice以备后用,其实就是个新手,哈哈,这个实例是我在参考了网上诸多不完整的例子的情况下,自己摸索完成的。期间遇到过一系列的棘手的问题,经过个人努力终于解决了。我把整个步骤都写完整了,以供以后像我这样的C#新手少走弯路,程序很简单,过程有点长,希望有耐心,对于入门还是有些帮助的。如果博客中没附上源码的【原因可能没法添加源码】,可以留言或邮箱我来发送给大家。

 

 

一、环境 

    我的开发环境是xpsp3,这个对于asp.net的要求是v2.0.50727

如果不是的话会报错,可以到本地的

C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_regiis.exe -i

运行即可。如果自己的已经安装过的就可以跳过,否则在webservic的调试中会报一下错:

名称以无效字符开头。处理资源 ‘http://localhost/ws/Service.asmx‘ 时出错。第 1 行,位置: 2

   其次,需要安装IIS,我测试的版本是iis5.1, 本来装了iis6 但是用不了,所以版本也很重用,本人在次耗费了部分心血。如果不清楚版本可以看看百科里的描述以作决定的参考:

http://baike.baidu.com/view/850.htm

 

二、程序

这个过程总共建立2个独立的项目:一个webservice 项目,一个调用。

   1 建立和部署webservice 项目:

   vs2008新建webservicesT  :注意是ASP.NET Web 服务应用程序

   技术分享

 

 之后系统会自动生成一个类似于helloworld的一个简单例子:

 技术分享

 

 打开之后,可以看到

 技术分享

 

至此最简单的webservice就建立好了。我们不需要做任何事情,就用他来测试。

 

 接着需要对整个工程“生成”和发布。

 生成只要右键点击项目选择“生成”即可。

发布也一样,如下截图。

 技术分享

 

  把发布的文件拷到iis工作路径中,并把这个文件夹“web共享”。

  在资源管理器中:

 技术分享

 

web

共享:

 技术分享
 

iis中查看,我建的文件名为sv:

 技术分享

 

 最后来查看一下是不是部署成功,可以在ie地址栏中输入相关的url:

 我涉及的url  http://localhost/sv/Service1.asmx

 成功的话可以看到下面的截图

 技术分享

 

然后点击“HelloWorld”链接:

 技术分享

 

然后点击“HelloWorld”链接,就可以最终的页面显示的xml内容:

 技术分享

 这样表示整个

webservice的建立和部署是成功的。

 

 

  2 接下来建立对webservice的调用调试。

 我是建立了一个web应用项目来调用测试的。

 步骤跟建立webservice项目类似,

注意选择好类型如图: 

 技术分享

 

其次,最重要的一步就是引用webservice ,

 项目右键选择“添加web引用”,可以看到下图:

 技术分享

 

 填入之前建立的webservice 对应的url ,此处是 http://localhost/sv/Service1.asmx

  点击前往即可:

 技术分享

  

  然后把往“Web引用名”中填入一个名字,我填的是kiss,这个名字比较重要,因为下面的步骤中要使用他,当然你可以任意,但请记住。

  然后在后台中写入调用的方法页面也加入触发事件:

 后台代码:

技术分享
 1 using System;
 2 
 3 using System.Collections;
 4 
 5 using System.Configuration;
 6 
 7 using System.Data;
 8 
 9 using System.Linq;
10 
11 using System.Web;
12 
13 using System.Web.Security;
14 
15 using System.Web.UI;
16 
17 using System.Web.UI.HtmlControls;
18 
19 using System.Web.UI.WebControls;
20 
21 using System.Web.UI.WebControls.WebParts;
22 
23 using System.Xml.Linq; 
24 
25  
26 
27 namespace wbcall
28 
29 {
30 
31     public partial class _Default : System.Web.UI.Page
32 
33     {
34 
35         protected void Page_Load(object sender, EventArgs e)
36 
37         {   }
38 
39         public string GetString()
40 
41         {    kiss.Service1 n = new kiss.Service1();
42 
43              string ss = n.HelloWorld();
44 
45              return ss;
46 
47         }
48 
49     }
50 
51 }
View Code

 

前台代码:

技术分享
 1  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wbcall._Default" %>
 2 
 3  
 4 
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 6 
 7  
 8 
 9 <html xmlns="http://www.w3.org/1999/xhtml" >
10 
11 <head runat="server">
12 
13     <title>无标题页</title>
14 
15     <script language="javascript" type="text/javascript">
16 
17 function B()
18 
19 {
20 
21 var a="<%=GetString() %>";
22 
23 alert (a);
24 
25 }
26 
27 </script>
28 
29 </head>
30 
31 <body>
32 
33     <form id="form1" runat="server">
34 
35     <div>
36 
37          kkkk
38 
39          <br />
40 
41          <input id="Bnt1" type="Button" value="button" runat ="server" onclick="B()" />
42 
43     </div>
44 
45     </form>
46 
47 </body>
48 
49 </html>
View Code

 

两个的截图分别如下:

 技术分享技术分享

 

然后把此项目“生成”、“发布”到iis上,这个过程跟 webservice 一样,不再多说。

假如已经完成,接下来可以做测试了。

很简单,在浏览器的地址栏中输入: http://localhost/sc/Default.aspx

可以看到

技术分享 

 

 点击按钮“button

 技术分享

 

 系统会有这么一个提示,提示的内容就是之前在

webservice中的写的,可以看一下两者是一致的,都输出"HelloWorld"。

 技术分享

 

 整个过程就结束了。当然调用的形式有多种,这里我只用了这个最简单的,其余的大家可以一起研究。

 这个webservice的建立和调用测试我都是在本机上,如果有必要可以在分布式环境上来测试。 

以上是关于最简单的webservice如何写的主要内容,如果未能解决你的问题,请参考以下文章

分布式通信Webservies

WCF探索之旅——WCF与WebService的异同

如何添加webservice的引用,并发布到服务器上

如何写一个简单的Web Service

C#最简单最完整的webservice实例

通过服务器端设置解决前端AJAX请求跨域访问WebServie(C#开发,IIS发布)