JAVA与NET的相互调用通过Web服务实现相互调用.docx
- 文档编号:30376297
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:13
- 大小:60.96KB
JAVA与NET的相互调用通过Web服务实现相互调用.docx
《JAVA与NET的相互调用通过Web服务实现相互调用.docx》由会员分享,可在线阅读,更多相关《JAVA与NET的相互调用通过Web服务实现相互调用.docx(13页珍藏版)》请在冰豆网上搜索。
JAVA与NET的相互调用通过Web服务实现相互调用
JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方。
而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发。
而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧。
在这里在下向各位介绍一下,JAVA与.NET相互调用的例子。
下面的介绍主要包括三方面:
一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用。
在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式。
首先说一下Web服务的来源,Web服务是一种新的Web应用程序分支,可以执行从简单的请求到复杂商务处理等任何功能。
一旦部署以后,其他Web服务应用程序可以发现并调用它部署的服务。
WebService是一种应用程序,它可以使用标准的互联网协议,像超文件传输协议(HTTP)、简单对象访问协议(SOAP)、XML等,将功能纲领性地体现在互联网和企业内部网上,Web服务被视作是Web上的组件编程。
Web服务必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。
XML和XSD
可扩展的标记语言XML 是WebService平台中表示数据的基本格式。
除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。
XML是由万维网协会(W3C)创建,W3C制定的XMLSchemaXSD 定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
WebService平台是用XSD来作为数据类型系统的。
当你用某种语言如JAVA、C#来构造一个WebService时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。
如想让它使用在不同平台和不同软件的不同组织间传递,还需要通过SOAP协议将它包装起来。
SOAP
SOAP即简单对象访问协议(SimpleObjectAccessProtocol),它是用于交换XML编码信息的轻量级协议。
它有三个主要方面:
XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。
SOAP可以运行在任何其他传输协议上。
例如,你可以使用SMTP,即因特网电子邮件协议来传递SOAP消息,这可是很有诱惑力的。
在传输层之间的头是不同的,但XML有效负载保持相同。
WebService希望实现不同的系统之间能够用“软件-软件对话”的方式相互调用,打破了软件应用、网站和各种设备之间的格格不入的状态,实现“基于Web无缝集成”的目标。
WSDL
WebService描述语言WSDL 就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述WebService及其函数、参数和返回值。
因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。
下面分开两个方面讲解一下如果通过Web服务实现JAVA与.NET的相互调用。
一、使用.NET作为服务器端,JAVA作为客户端实现相互调用。
在.NET系统里面,以WCF作为新一代的服务开发工具是微软的一个新卖点,我们就以WCF为例子实现服务器端,首先新建一个网站项目,在网站添加一个WCF服务PersonService。
你将看到PersonService.svc、IPersonService、PersonService.cs三个文件,其中IPersonService是对向暴露一个接口,接口的功能由PersonService来实现,客户端则通过PersonalService.svc来寻获服务,并对其添加引用的。
//在PersonService.svc里,只包括一行,其中列明了该服务的实现类
<%@ServiceHostLanguage="C#"Debug="true"Service="Service.PersonService"CodeBehind="~/App_Code/PersonService.cs"%>
//服务的实现
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;
//注意:
使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IPersonService”。
namespaceService
{
[ServiceContract]
publicinterfaceIPersonService
{
[OperationContract]
IList
}
publicclassPersonService:
IPersonService
{
publicIList
{
IList
Personperson1=newPerson();
person1.ID=0;
person1.Age=27;
person1.Name="Leslie";
personList.Add(person1);
Personperson2=newPerson();
person2.ID=1;
person2.Age=23;
person2.Name="Rose";
personList.Add(person2);
Personperson3=newPerson();
person3.ID=2;
person3.Age=29;
person3.Name="Jack";
personList.Add(person3);
returnpersonList;
}
}
}
为了使用Person能够实现远程传送,我们必须对Person进行序列化,在WCF中包括服务契约、数据契约、消息契约三部分,而数据契约正是用于对数据进行序列化处理的,如果想对WCF有进一步的了解,可以链接使用WCF实现SOA面向服务编程:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Runtime.Serialization;
///
///Person的摘要说明
///
namespaceService
{
[DataContract]
publicclassPerson
{
[DataMember]
publicintID
{
get;
set;
}
[DataMember]
publicstringName
{
get;
set;
}
[DataMember]
publicintAge
{
get;
set;
}
}
}
数据契约里面有多种的序列化方式,包括DataContractSerializer,NetDataContractSerializer,XmlServializer,DataContractJsonSerializer。
在这里面只用使用最普遍的DataContractSerializer,而DataContractJsonSerializer是现今比较热门的方式,特别是在开发网络项目时候,多使用Json进行数据通讯。
最后配置好web.config,就可以成功将WCF服务发布:
xmlversion="1.0"?
>
下面使用MyEclipse8.6进行客户端开发,首先添加对服务的引用,按Ctrl+N新建一个项目,选择WebService->WebServiceClient,单击下一步,这时候选择在Framework上选择JAX-WS,单击下一步:
在WSDLURL上输入服务的路径,并为服务添加一个Javapagckage包myServices,点击完成,这样WCF服务便可成功加入到客户端。
此时为此项目添加测试类,运行进行测试:
packagemyAssembly;
importjava.util.List;
publicclassTest{
publicstaticvoidmain(String[]args){
myServices.PersonServiceservice=newmyServices.PersonService();//获取服务对象
myServices.IPersonServicepersonService=service.getBasicHttpBindingIPersonService();//通过basicHttpBinding协议绑定远程对象
List
for(intn=0;n System.out.println("ID: "+personList.get(n).getID()+"Name: "+personList.get(n).getName().toString()+"Age: "+personList.get(n).getAge()); } } } 二、使用JAVA作为服务器端,.NET作为客户端实现相互调用。 JAVA开发WebService的工具有很多,最常用的有Axis、XFire、NetBean等,在JAVA-SE6.0以上支持JAX-WS2.0,JAX-WS2.0是JAX-RPC1.0的更新产品。 在JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。 在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。 JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。 在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(serviceendpointinterface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。 在下面我们就以XFire建立一个WebService。 首先建立一个在一个项目上单击右键,选择MyEclipse->AddXFireWebServiceCapabilities,引用了XFire工具包以后。 在项目会自动建立一个WebServices文件夹,文件夹里面的service.xml就是对发布WebService进行配置的。 现在先建立好一个服务层: //建立一个Model包,里面包含一个值对象Person packageModel; importjava.io.Serializable; publicclassPersonimplementsSerializable{ privateintid; privateStringname; privateintage; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } } //建立一个Service包,里面包含服务接口 packageService; importjava.util.List; importModel.*; publicinterfacePersonService{ List } //建立一个ServiceImpl包,实现服务 packageServiceImpl; importModel.*; importService.*; importjava.util.*; publicclassPersonServiceImplimplementsPersonService{ publicList List Personperson1=newPerson(); person1.setId(0); person1.setAge(23); person1.setName("Leslie"); personList.add(person1); Personperson2=newPerson(); person2.setId (1); person2.setAge(30); person2.setName("Mike"); personList.add(person2); returnpersonList; } } 在Service.xml上面对服务进行配置: xmlversion="1.0"encoding="UTF-8"? > //xfire.codehaus.org/config/1.0"> //leslie-pc: 8080/PersonService Service.PersonService ServiceImpl.PersonServiceImpl 其配置功能如下: ∙service service标签和它所包含的xml内容为发布成Web服务的POJO提供完整的描述。 ∙name Web服务被发布时所采用的唯一名称。 ∙namespace Web服务发布时所使用的命名空间。 ∙serviceClass Web服务接口类的全名,包括包名和类名。 ∙implemetationClass Web服务实现类的全名,包括包名和类名。 现在可以运行程序,对服务进行测试,在测试时输入服务地址http: //leslie-pc: 8080/WebSite1/services/PersonService? wsdl,系统将显示wsdl代码: xmlversion="1.0"encoding="UTF-8"? > - definitionstargetNamespace="http: //leslie-pc: 8080/PersonService"xmlns: ns1="http: //Model"xmlns: soapenc12="http: //www.w3.org/2003/05/soap-encoding"xmlns: tns="http: //leslie-pc: 8080/PersonService"xmlns: wsdl="http: //schemas.xmlsoap.org/wsdl/"xmlns: xsd="http: //www.w3.org/2001/XMLSchema"xmlns: soap11="http: //schemas.xmlsoap.org/soap/envelope/"xmlns: wsdlsoap="http: //schemas.xmlsoap.org/wsdl/soap/"xmlns: soapenc11="http: //schemas.xmlsoap.org/soap/encoding/"xmlns: soap12="http: //www.w3.org/2003/05/soap-envelope"> - types> - schemaxmlns: xsd="http: //www.w3.org/2001/XMLSchema"attributeFormDefault="qualified"elementFormDefault="qualified"targetNamespace="http: //leslie-pc: 8080/PersonService"> - elementname="GetList"> complexType/> element> - elementname="GetListResponse"> - complexType> - sequence> elementmaxOccurs="1"minOccurs="1"name="out"nillable="true"type="ns1: ArrayOfPerson"/> sequence> complexType> element> schema> - schemaxmlns: xsd="http: //www.w3.org/2001/XMLSchema"attributeFormDefault="qualified"elementFormDefault="qualified"targetNamespace="http: //Model"> - complexTypename="ArrayOfPerson"> - sequence> elementmaxOccurs="unbounded"minOccurs="0"name="Person"nillable="true"type="ns1: Person"/> sequence> complexType> - complexTypename="Person"> - sequence> elementminOccurs="0"name="age"type="xsd: int"/> elementminOccurs="0"name="id"type="xsd: int"/> elementminOccurs="0"name="name"nillable="true"type="xsd: string"/> sequence> complexType> schema> types> - messagename="GetListRequest"> partname="parameters"element="tns: GetList"/> message> - messagename="GetListResponse"> partname="parameters"element="tns: GetListResponse"/> message> - portTypename="PersonServicePortType"> - operationname="GetList"> inputname="GetListRequest"message="tns: GetListRequest"/> outputname="GetListResponse"message="tns: GetListResponse"/> operation> portType> - bindingname="PersonServiceHttpBinding"type="tns: PersonServicePortType"> bindingstyle="document"transport="http: //schemas.xmlsoap.org/soap/http"/> - operationname="GetList"> operationsoapAction=""/> - inputna
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA NET 相互 调用 通过 Web 服务 实现