JAVAWebService教程追雨笔记教程_第二版.doc

上传人:PIYPING 文档编号:11082210 上传时间:2021-06-28 格式:DOC 页数:57 大小:335.50KB
返回 下载 相关 举报
JAVAWebService教程追雨笔记教程_第二版.doc_第1页
第1页 / 共57页
JAVAWebService教程追雨笔记教程_第二版.doc_第2页
第2页 / 共57页
JAVAWebService教程追雨笔记教程_第二版.doc_第3页
第3页 / 共57页
JAVAWebService教程追雨笔记教程_第二版.doc_第4页
第4页 / 共57页
JAVAWebService教程追雨笔记教程_第二版.doc_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《JAVAWebService教程追雨笔记教程_第二版.doc》由会员分享,可在线阅读,更多相关《JAVAWebService教程追雨笔记教程_第二版.doc(57页珍藏版)》请在三一文库上搜索。

1、 追雨制作.net/java WebService完全教程V2.0整理/编写:Rain修正:时间:2010-10-28目录建立一个WebService31.1要点说明调用WebService(添加引用的方式)42.1同步与异步调用的方式73.Net采用SOAP调用service83.1不带SoapHeader的Web Service调用8(SOAP 1.1以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。)93.2带SoapHeader的Web Service调用104查看调用WebServices返回的信息体(.Net)125查看请求WebServices的信息体(.N

2、et)136.Net WebServices采用SOAP身份认证(用户名/密码验证)的方式部署与调用136.1部署136.2调用157axis 详细开发教程157.1利用AXIS开发Webservice(一) 如何发布自己的webservice157.21.即时发布 JWS (Java Web Service) Files - Instant Deployment167.32.定制发布 Custom Deployment - Introducing WSDD17利用AXIS开发Webservice(二) WSDD的一些高级特性207.41、取消发布一个webservice207.52、WSDD

3、的高级特性207.63、高级特性Handler217.74、高级特性Chain23利用AXIS开发Webservice(三) 如何传递javabean和你的对象26利用AXIS开发Webservice(四) 如何抛出自定义异常30利用AXIS开发Webservice(五) 如何传递文件378用axis静态调用(.net/java)WebService (Java环境)_没有有身份验证399用axis静态调用(.net/java)WebService (Java环境)_有身份验证4110用axis动态调用WebService 调用类(Java环境)4310.1调用类4310.2调用方法5110.

4、3调用方法2-序列化5211参考资料5612若有什么错误欢迎指出5613若有什么建议和资料也欢迎,告诉我。多谢571 .net建立一个WebService直接用VS建立一个Web services 的项目,即可。新建后,项目自动有一个,服务了:如下:/ / Service1 的摘要说明 / WebService(Namespace = http:/tempuri.org/) WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) ToolboxItem(false) public class Service1 : System.W

5、eb.Services.WebService WebMethod public string HelloWorld() return Hello World; 1.1 要点说明WebService(Namespace = http:/tempuri.org/)这个命名空间,调用的,与服务上的一致.2 .net调用WebService(添加引用的方式)HelloWorld太简单了,我们调用一下,网络上现有的天气预报服务。天气预报服务:http:/ 引用名中,可默认也可自定义,下面默认为:.webxml.www/http:/ System;using System.Collections.Gene

6、ric;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace 天气助手 public partial class Weather : Form public Weather() InitializeComponent(); public string GetWeather(string xCity)/取城市天气 .webxml.www.WeatherWebService mWeatherWebService

7、 = new .webxml.www.WeatherWebService(); string WeatherOfCity = mWeatherWebService.getWeatherbyCityName(xCity); return WeatherOfCity; public void Weather_Shown(object sender, EventArgs e)/取支持的省州,放入下拉 try .webxml.www.WeatherWebService mWeatherWebService = new .webxml.www.WeatherWebService(); string mA

8、rea = mWeatherWebService.getSupportProvince(); int mCount = mArea.Length - 1; comboBox01.Items.Clear(); for (int mI = 0; mI = mCount; mI+) comboBox01.Items.Add(mAreamI.ToString(); comboBox01.SelectedIndex = 0; catch public void comboBox01_SelectedIndexChanged(object sender, EventArgs e)/取支持的市,放入下拉 t

9、ry .webxml.www.WeatherWebService mWeatherWebService = new .webxml.www.WeatherWebService(); string mCity = mWeatherWebService.getSupportCity(comboBox01.Text); int mCount = mCity.Length - 1; comboBox02.Items.Clear(); for (int mI = 0; mI = mCount; mI+) comboBox02.Items.Add(mCitymI.Remove(mCitymI.IndexO

10、f(); comboBox02.SelectedIndex = 0; catch public void comboBox02_SelectedIndexChanged(object sender, EventArgs e)/显示 try string WeatherOfCity = GetWeather(comboBox02.ItemscomboBox02.SelectedIndex.ToString(); label03.Text = WeatherOfCity0.ToString(); label05.Text = WeatherOfCity1.ToString(); label06.T

11、ext = WeatherOfCity10.ToString(); /今天 pictureBox01.ImageLocation = images/weather/ + WeatherOfCity8.ToString(); pictureBox02.ImageLocation = images/weather/ + WeatherOfCity9.ToString(); label07.Text = WeatherOfCity6.ToString() + WeatherOfCity5.ToString() + WeatherOfCity7.ToString(); label08.Text = W

12、eatherOfCity11.ToString(); /明天 pictureBox03.ImageLocation = images/weather/ + WeatherOfCity15.ToString(); pictureBox04.ImageLocation = images/weather/ + WeatherOfCity16.ToString(); label16.Text = WeatherOfCity13.ToString() + WeatherOfCity12.ToString() + WeatherOfCity14.ToString(); /后天 pictureBox05.I

13、mageLocation = images/weather/ + WeatherOfCity20.ToString(); pictureBox06.ImageLocation = images/weather/ + WeatherOfCity21.ToString(); label17.Text = WeatherOfCity18.ToString() + WeatherOfCity17.ToString() + WeatherOfCity19.ToString(); /城市说明及图片 pictureBox07.ImageLocation = http:/ + WeatherOfCity3.T

14、oString(); label18.Text = WeatherOfCity22.ToString(); /预计时间 label19.Text = 预报时间: + WeatherOfCity4.ToString(); catch 2.1 同步与异步调用的方式以HelloWorld为例同步:就是要走那个方法。(要等它)异步:调用那个方法,让它自己走。本线程,继续往下走。(不等它)不太懂,可能不是这样理解吧。-webserviceWebMethod public string HelloWorld() return Hello World;异步调用localhost.Service servic

15、e = new WindowsApp.localhost.Service();service.HelloWorldCompleted += new WindowsApp.localhost.HelloWorldCompletedEventHandler(service_HelloWorldCompleted);/这里是委托一个结束事件 使用回调机制实现异步化处理是功能最强的方式。它允许在Web服务被调用、执行和返回信息期间继续完成它所需要的工作。这时,客户方代码通过在BeginX方法的参数中显式地确定把地址传递到一个Public方法(该方法由委托机制实现),以便在异步化调用完成后可以把结果返回

16、到程序中。 / do Asyn calling here异步调用service.HelloWorldAsync();void service_HelloWorldCompleted(object sender,WindowsApp.localhost.HelloWorldCompletedEventArgs e)同步调用localhost.Service service = new WindowsApp.localhost.Service();3 .Net采用SOAP调用service3.1 不带SoapHeader的Web Service调用(SOAP 1.1以下是 SOAP 1.2 请求和

17、响应示例。所显示的占位符需替换为实际值。) 以最简单的为例HelloWorld:POST /Service1.asmx HTTP/1.1Host: localhostContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: http:/tempuri.org/HelloWorld (下面的要用所有”,才能运行。这些是为了方便大家比较上图。) /构造soap请求信息 StringBuilder soap = new StringBuilder(); soap.Append(); soap.Append(); so

18、ap.Append(); soap.Append( ); /发起请求 Uri uri = new Uri(http:/localhost:2213/Service1.asmx); WebRequest webRequest = WebRequest.Create(uri); webRequest.ContentType = text/xml; charset=utf-8; webRequest.Method = POST; using (Stream requestStream = webRequest.GetRequestStream() byte paramBytes = Encoding

19、.UTF8.GetBytes(soap.ToString(); requestStream.Write(paramBytes, 0, paramBytes.Length); string re=; /响应 WebResponse webResponse = webRequest.GetResponse(); using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8) re+= myStreamReader.ReadToEnd(); 3.2 带SoapH

20、eader的Web Service调用using System;using System.IO;using System.Net;using System.Text;namespace ConsoleApplication1class Programstatic void Main(string args)/构造soap请求信息StringBuilder soap = new StringBuilder();soap.Append();soap.Append();soap.Append();soap.Append();/mustUnderstand=1,接收者必须能处理此SoapHeader信

21、息,否则返回错误soap.Append(admin);soap.Append(admin888);soap.Append();soap.Append();soap.Append();soap.Append();soap.Append(dnawo);soap.Append();soap.Append();soap.Append();/发起请求Uri uri = new Uri(http:/localhost:39674/Service1.asmx);WebRequest webRequest = WebRequest.Create(uri);webRequest.ContentType = te

22、xt/xml; charset=utf-8;webRequest.Method = POST;using (Stream requestStream = webRequest.GetRequestStream()byte paramBytes = Encoding.UTF8.GetBytes(soap.ToString();requestStream.Write(paramBytes, 0, paramBytes.Length);/响应WebResponse webResponse = webRequest.GetResponse();using (StreamReader myStreamR

23、eader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8)Console.WriteLine(myStreamReader.ReadToEnd();Console.ReadKey();4 查看调用WebServices返回的信息体(.Net)可参考4.1节的内容: /响应 WebResponse webResponse = webRequest.GetResponse(); using (StreamReader myStreamReader = new StreamReader(webResponse.Ge

24、tResponseStream(), Encoding.UTF8) re+= myStreamReader.ReadToEnd(); 返回的信息应该也是一个结构体信息:类似如下:no5 查看请求WebServices的信息体(.Net)在方法部: HttpContext.Current.Request.SaveAs(E:jj.txt,true);6 .Net WebServices采用SOAP身份认证(用户名/密码验证)的方式部署与调用6.1 部署WebServices为了安全性,不在参数中传递:用户名/密码验证常用方式:采用SOAP身份认证常见的web方法如下(不采用SOAP身份认证): W

25、ebMethod public string HelloWorld(string name,string key,string contents) if (/验证是否有权访问 ) return 合法用户; else return 没有权限访问; 采用SOAP身份认证:1:创建Soap头,用验证用户public class MySoapHeader:SoapHeader public MySoapHeader() public string UserName; public string PassWord; public bool ValideUser(string in_UserName, s

26、tring in_PassWord) if (in_UserName = 1234) & (in_PassWord = 0000) return true; else return false; 2:在WEB方法中应用soappublic MySoapHeader header; /定义用户身份验证类变量headerWebMethod(Description = 用户验证测试) System.Web.Services.Protocols.SoapHeader(header)/用户身份验证的soap头 public string HelloWorld(string contents) /验证是否

27、有权访问 if (header.ValideUser(header.UserName, header.PassWord) return 用户合法; else return 没有权限访问; 6.2 调用1yw.WebService.Service1 test =new 1yw.WebService.Service1();/web引用(改成您自己的) 1yw.MySoapHeader Header = new 1yw.MySoapHeader();/web引用创建soap头对象(改成您自己的) /设置soap头变量 Header.Username = 1234; Header.Password =

28、 0000; test.MySoapHeader = Header; /调用web 方法 string re = test.HelloWorld(dddd);/就这样啦7 axis 详细开发教程7.1 利用AXIS开发Webservice(一) 如何发布自己的webservice 解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%webappsaxisWEB-INFlib目录下。启动tomc

29、at,访问http:/localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。 PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。 现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介

30、绍。 7.2 1.即时发布 JWS (Java Web Service) Files - Instant Deployment 即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是 java web service的缩写)拷贝到%TOMCAT_HOME%webappsaxis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所有事情。下面是一段示例代码:java 代码public class HelloAXIS public String Hello(String name) return AXIS say hel

31、lo to + name; 把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%webappsaxis目录下,启动Tomcat之后访问 http:/localhost:8080/axis/HelloAXIS.jws 如果能看到 Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是编写Client端测试代码了。java 代码package com.chnic.test; import .URL; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class Test public static void main(String args) throws Exception String targetEendPoint = http:/localhost:8080/axis/HelloAXIS.jws; Service service = new

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1