本文包括两个部分,***部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services。

项目需要的工具

◆WindowsXP Professial(IIS)

◆Eclipse3.1(已装好Tomcat axis)

◆VS.Net 2003

备注:下载安装Tomcat5.5.16 以及 Axis的开发包,并做相应配置。看我前一片文档。

用.NET做客户端调用Java写的Web Services

1.生成一个JavaWeb Services

使用Eclipse生成一个Web Services是非常简单的。新建一个Web工程,右键建立一个Class,名为HelloClient.java。代码如下:

Java代码:publicclassHelloClient

{

publicString getName(String name)

{

return"Hello,"+name;

}

}

右键此文件选择"WebServices"-->"Create Web Service"即可部署为本机的一个ws。在IE浏览器中输入http://localhost:8008/testWebService/services/HelloClient可以看到已经部署了的HelloClient服务。输入http://localhost:8008/testWebService/services/HelloClient?wsdl这个服务的描述文件。

新建一个项目(WinForm,ASP.net都可以),我在这里使用的是一个Asp.Net项目。在起始页面上放置一个文本输入框用来输入,一个标签用来显示调用Web Services的结果,放置一个按钮,用来单击调用Web Services。然后,选择添加Web 引用,URL一栏里填入http://localhost:8008/testWebService/services/HelloClient?wsdl,Web 引用的名称输入JavaWebService,单击添加引用按钮就可以了。此时,我们可以在VS.net 的Solution Explore中看到这个Web 引用。添加代码如下:

C# 代码:protectedSystem.Web.UI.WebControls.TextBox txtName;

protectedSystem.Web.UI.WebControls.Button btnSend;

protectedSystem.Web.UI.WebControls.Label lblMsg;

privateJavaWebService.HelloClientService ws;

privatevoidPage_Load(objectsender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

ws=newtestWebService.JavaWebService.HelloClientService();

}

privatevoidbtnSend_Click(objectsender, System.EventArgs e)

{

lblMsg.Text=ws.getName(txtName.Text);

}

这样,一个.NET客户端就完成了,测试一下,工作正常,OK.

用Java做客户端调用.NET写的 Web Services

1. 用VS.NET新建一个Asp Web Services工程,添加一个web 服务,命名为Service1.asmx。新增一个web method,代码如下:

C# 代码://指定SoapAction

[SoapRpcMethod(Action="http://www.xxx.com/Rpc",

RequestNamespace="http://www.xxx.com/SU",ResponseNamespace="http://www.xxx.com/SU")]

[WebMethod]

publicstringgetName(stringname)

{

return"Hello"+name;

}

然后运行它,并利用IE进行测试成功。

2. 打开Eclipse,新建一个Web项目,添加一个JSP页面 ,命名为action_hello.jsp,输入下列代码:

Java代码:

java 代码

request.setCharacterEncoding("GBK");

Stringname=request.getParameter("name");

Stringendpoint="http://localhost/HelloClient/Service1.asmx";

Serviceservice=newService();

Callcall= (Call)service.createCall();

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

call.setOperationName(new QName("http://www.zjh.com/SU","getName"));

call.addParameter("name",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

call.setUseSOAPAction(true);

call.setSOAPActionURI("http://www.zjh.com/Rpc");

Stringres=(String)call.invoke(new Object[]{name});

out.print(res);

%>

这个要比Java调用Java写的ws来的复杂。ws和Java客户端都要设置SOAPAction,否则会有异常说 System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 标头 SOAPAction 的值

总结

经过两天的试验,终于从技术上明确了通过Web Services实现.net 与 java的互通是可能的。当然有几点是需要注意的:

1. 在提供Web Services的时候,尽量使用xml schema中支持的变量类型做参数。如果使用.net 中的dataset这种类型,对于java来说解析起来将是一个灾难,当然,理论上是可以解析的。但是从效率角度来说,在Web Services与客户端交换信息的过程中,始终有一个序列化和反序列化的问题。如果使用dataset这种类型,系统还需要对它进行序列化操作,这将是一个很耗费资源的过程。而使用string类型将简单很多。

2. 如果使用了soap header等扩展功能,例如使用了微软提供的WSE技术,它们之间的相互通信需要作特殊处理。

【编辑推荐】

【责任编辑:red7 TEL:(010)68476606】

点赞 0

net java互相调用_Java与.NET的WebServices相互调用相关推荐

  1. Java与.NET的WebServices相互调用

    一:简介  本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何 ...

  2. android js接口调用方法,详解Android JS相互调用

    最近在研究Android.JS相互调用,之前没怎么接触过,只知道loadUrl()就可以加载一个网页了,研究过之后发现Android可以调JS,JS也可以调Android原生控件,很开心啊.下面小编就 ...

  3. java 不同包 调用_java中不同包之间的调用

    <java中不同包之间的调用>由会员分享,可在线阅读,更多相关<java中不同包之间的调用(4页珍藏版)>请在金锄头文库上搜索. 1.建立两个类 PackageA.Packag ...

  4. java 多线程 压缩_Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)...

    线程模型 生产者Provider线程为一,主要进行深搜目录文件:. 消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务. 持久化线程Persist 将已经消费的消息存 ...

  5. java getmethod 使用_java – 使用子类作为方法参数调用getMethod

    是否可以调用一个方法,其中参数对象或参数类是一个子类,并且该方法本身将超类作为参数? 我试图调用这个方法public void setNewProblem(Problem problem);具体实现了 ...

  6. java B2B2C源码电子商务平台 -SpringCloud服务相互调用RestTemplate

    Springcloud中的服务消费,就需要我们服务之前相互发请求了.之前我们都是想着用http请求相关的交互,用的比较多的是apache httpcomponents ,现在springboot提供了 ...

  7. vue.js html 相互传值,Vue 父子组件之间相互调用传值以及多层组件之间相互调用传值...

    一.父子组件传值 要点1:父组件赋予子组件属性值,子组件通过props 来接收值. 要点2:父组件可以通过 子组件对象($ref),来调用子组件的属性以及方法 要点3:子组件通过$emit 来调用父组 ...

  8. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  9. 各编程语言 + aardio 相互调用示例(简易代码)

    代码都很简单,复制可直接运行.aardio 快速调用 C,C++,C#,Java,R,V,Python,JavaScript,Node.js,Rust,PHP,Ruby,PowerShell,Fort ...

最新文章

  1. Python 开发面试题
  2. 【Paper】An Experiment Comparing Double Exponential Smoothing and Kalman Filter-Based Predict
  3. Python标准库的强大功能的相关介绍
  4. Linux系统swappiness参数在内存与交换分区之间优化作用
  5. ProgressBar 类
  6. ZK 6中的MVVM初探
  7. DE19 Introduction to the Laplace Transform
  8. Linux 组与用户
  9. poj 1325 Machine Schedule 匈牙利二分匹配 基础
  10. 知乎:国家何时整治程序员的高效现象?
  11. 如何撰写专利说明书?
  12. 三次样条插值的缺点_三次样条插值
  13. VIBE 运动目标检测
  14. 人民大学联合今目标成立企业行为研究中心
  15. 飞机大战源码php,飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...
  16. 一本通2056:【例3.7】最大的数
  17. 辉芒微IO单片机FT60F010A-URT
  18. 开源利器分享:BitBar 坐看今天你的项目涨了多少star
  19. 过敏体质也会遗传给孩子,孕期妈妈应该尽早预防
  20. 特斯拉电动车电池组电路结构

热门文章

  1. Ubuntu16.04 Swap的开闭
  2. Linux内核:一文读懂文件系统、缓冲区高速缓存和块设备、超级块
  3. Linux设备驱动与整个软硬件系统的关系
  4. 【HTML+CSS网页设计与布局 从入门到精通】第2章
  5. linux平台下C语言按进程名查找进程号pid
  6. java 重力脚本_Java中非常简单的脚本解析器
  7. python爬虫基本原理_Python爬虫【一】爬虫的基本原理
  8. 苹果手机内存怎么查_为什么苹果手机内存越用越小
  9. 51单片机的轮胎气压监测系统_汽车的胎压监测系统有哪些作用?
  10. 澳大利亚计算机领域的科学家,澳科学家首创硅基元件 突破量子计算机制造瓶颈...