webservice接口开发简单例子(webservice接口编写)

http://www.itjxue.com  2023-01-28 11:35  来源:未知  点击次数: 

如何写一个简单的Web Service

在开始下面这个例子之前,你的系统需要:

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(完整的是)。这是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 = "", //其实这个才是最重要的啦~,其它的都可以不要哦

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=""

- xs:schema id="NewDataSet" xmlns="" xmlns:xs="" 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"

ID1/ID

szUsertaoyi/szUser

szSex男/szSex

szAddr四川泸州/szAddr

/Demo

- Demo diffgr:id="Demo2" msdata:rowOrder="1"

ID2/ID

szUserxiner/szUser

szSex女/szSex

szAddr四川宜宾/szAddr

/Demo

/NewDataSet

/diffgr:diffgram

/DataSet

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

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

一、新建一个ASP.Net Web Application工程,与创建Web Service的第一步一样,只是工程类型不一样罢了。我这里工程名为WebServiceDemoTest,完整的为,系统就在相应的目录(c:\Inetpub\wwwroot\WebserviceDemoTest)下生成了所需文件。

二、在设计视图下打开WebForm1.aspx文件,在里面放置一个panel容器,为了达到测试的目的,我们需要三个服务端按钮和一个服务端文本框,分别调用我们在Web Service中写的三个函数,另外,为了展示调用方法所得达的数据,还需要一个服务端标签控件和一个DataGrid控件。页面的布置就随便你了,想怎么放置就怎么放置,只要能达到演示的目的就行。

三、引用先前写的Web Service程序,菜单步骤如下project-add web reference...,然后输入我们Web Service的路径,这里是,点击添加就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演示程序!”的字符串。

java如何写webservice服务端

Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子。要使用 JDK6u4 之后的版本才能编译通过。

先编写一个 Web Service 的接口:

@WebService

@SOAPBinding(style?=?Style.RPC)?

public?interface?TimeServer?{

????@WebMethod?String?getTimeAsString();

????@WebMethod?long?getTimeAsElapsed();

}

再编写 Web Service 实现:

import?java.util.Date;

import?javax.jws.WebService;

@WebService(endpointInterface?=?"test.TimeServer")

public?class?TimeServerImpl?implements?TimeServer?{

????public?String?getTimeAsString()?{?return?new?Date().toString();?}

????public?long?getTimeAsElapsed()?{?return?new?Date().getTime();?}

}

最后启动 Web Service:

public?class?TimeServerPublisher?{

????public?static?void?main(String[?]?args)?{

??????Endpoint.publish("",?new?TimeServerImpl());

????}

}

如果正常启动,可以用浏览器访问 看到这个 Web Service 的 wsdl 文档。

详解怎样使用Axis开发Web Service的实例

一、Axis安装 1、环境 J2SE SDK 1.3 or 1.4: 我使用 1.4.2 Servlet Container: 我使用的Tomcat 5.0

2、到 http //ws apache org/Axis/网站下载Axis安装包

3、解压缩安装包,将Axis_UNZIP_PATH\Axis-version\webapps下的Axis包拷贝到TOMCAT_HOME\webapps\下,以下约定Axis_HOME为该TOMCAT_HOME\webapps\Axis目录

4、启动tomcat,访问 检查安装是否成功

5、以上步骤执行成功,可以开发webservice例子了

Axis支持三种web service的部署和开发,分别为:

1、Dynamic Invocation Interface ( DII)

2、Stubs方式

3、Dynamic Proxy方式

二、编写DII(Dynamic Invocation Interface )方式web服务

1.编写服务端程序HelloClient

import org.apache.Axis.client.Call;

import org.apache.Axis.client.Service;

import javax.xml.namespace.QName;

import javax.xml.rpc.ServiceException;

import java.net.MalformedURLException;

import java.rmi.RemoteException;

public class SayHelloClient2

{

public static void main(String[] args)

{

try

{

String endpoint =

"";

Service service = new Service();

Call call = null;

call = (Call) service.createCall();

call.setOperationName(new QName(

"",

"getName"));

call.setTargetEndpointAddress

(new java.net.URL(endpoint));

String ret = (String) call.invoke(new Object[]

{"zhangsan"});

System.out.println("return value is " + ret);

}

catch (Exception ex)

{

ex.printStackTrace();

}

}

}

三、编写Dynamic Proxy方式访问服务

1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient

2、编写代理接口

import javax.xml.rpc.Service;

import javax.xml.rpc.ServiceFactory;

import java.net.URL;

import javax.xml.namespace.QName;

public class TestHelloClient

{

public static void main(String[] args)

{

try

{

String wsdlUrl =

"";

String nameSpaceUri =

"";

String serviceName = "HelloClientService";

String portName = "HelloClient";

ServiceFactory serviceFactory =

ServiceFactory.newInstance();

Service afService =

serviceFactory.createService(new URL(wsdlUrl),

new QName(nameSpaceUri, serviceName));

HelloClientInterface proxy = (HelloClientInterface)

afService.getPort(new QName(

nameSpaceUri, portName),

HelloClientInterface.class);

System.out.println

("return value is "+proxy.getName("john") ) ;

}catch(Exception ex)

{

ex.printStackTrace() ;

}

}

}

四、编写wsdd发布web服务,编写stub client访问web服务

1、编写服务端程序server,SayHello.java,编译server.SayHello.java

deploy.wsdd

deployment xmlns=

""

xmlns:java=

""

handler name="print" type="java:LogHandler"/

service name="sayhello"

provider="java:RPC"

requestFlow

handler type="print"/

/requestFlow

parameter name="className"

value="server.SayHello"/

parameter name="allowedMethods"

value="*"/

/service

/deployment

3、将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\Axis\WEB-INF\classes

4、发布服务:

java org.apache.Axis.client.AdminClient deploy.wsdd

5、生成client stub文件

a:方式1

将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,

执行下面的命令生存client stub

java org.apache.Axis.wsdl.Java2WSDL

-oSayHello.wsdl -l

/Axis/services/SayHello -nsayhello server.SayHello

执行如下命令生成client stub

public class SayHelloClient

{

public static void main(String[] args)

{

try

{

SayHelloService service = new client.

SayHelloServiceLocator();

client.SayHello_PortType

client = service.getSayHello();

String retValue=client.getName("zhangsan");

System.out.println(retValue);

}

catch (Exception e)

{

System.err.println

("Execution failed. Exception: " + e);

}

}

}

如何调用webservice接口

webservice主要是一些站点为咱们写好了的方法,供咱们调用,当然也可以自己去编写自己的webservice, 所以首先得找到这样的接口。看一些站点有没有这样的接口。

下面咱们就拿一个简单的天气预报接口。先把天气预报接口的地址输入地址栏: ( 。36wu。com/weatherService.asmx 这个是例子,实际中根据个人需要修改)

会出现一些带有链接的方法名和参数说明之类的。看完之后,然后进链接可以看到测试,可以先把想测试的参数写进去,点击调用,会出现一个xml文件,这些就是得到的结果,依情况而定咱们出把结果处理成想要的就可以了。

下面说一下怎么在项目中调用:新建一个web项目,然后点击添加引用服务如图,然后点击确定。

这样就会发现在webconfig文件里面多了一下节点,而且项目类中的Service References文件件多了一个绿色的东西。可以点击看看他有哪些方法,应该是和咱们在浏览器输入链接的方法是一致的,剩余就是怎么调用了。下面给出具体的代码:本代码值在webForm中先添加Lable、TextBox、Button以及Literal各一个。然后点击按钮。

protected void Button1_Click(object sender, EventArgs e)

{

if (!string.IsNullOrEmpty(this.TextBox1.Text))

{

WeatherService.WeatherWebServiceSoapClient service = new WeatherService.WeatherWebServiceSoapClient();

String[] strWeatherInfo = service.getWeatherbyCityName(this.TextBox1.Text);

StringBuilder str = new StringBuilder("");

str.AppendLine("您查看天气信息如下:");

foreach (string info in strWeatherInfo)

{

str.AppendLine(info+"br/");

}

this.Literal1.Text =str.ToString();

}

}

运行程序, 就看到效果了。

怎么发布webservice接口

Webservice是系统对外的接口,比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。附件是使用Axis编写WebService的例子,本例子的WebService提供了两个方法,分别是sayHello和sayHelloToPerson,第一个只是返回一个"Hello"字符串,没有参数,第二个函数接受一个字符串作为参数,返回"Hello 参数值",该例子比较简单,但是清楚的说明了从编写代码到发布为WebService以及测试编写好的WebService全过程。以下是操作步骤: 1、编写服务代码 服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,在HelloService.java类中 2、发布WebService 要将上边写的HelloService类发布为WebService,需要先搭建Web应用。下面是在Tomcat下使用Axis创建WebService服务的例子。 3、在Tomcat下创建Web应用 在该例子中,在Tomcat下创建了一个context path为test_webservice的WEB应用。 (1) 在Tomcat的webapps下创建如下文件系统 test_webservice WEB-INF lib...

(责任编辑:IT教学网)

更多

推荐excel文章