|
Java與.NET是現(xiàn)今世界競(jìng)爭(zhēng)激烈的兩大開(kāi)發(fā)媒體,兩者語(yǔ)言有很多相似的地方。而在很多大型的開(kāi)發(fā)項(xiàng)目里面,往往需要使用兩種語(yǔ)言進(jìn)行集成開(kāi)發(fā)。而很多的開(kāi)發(fā)人員都會(huì)偏向于其中一種語(yǔ)言,在使用集成開(kāi)發(fā)的時(shí)候?qū)α硪环N語(yǔ)言感覺(jué)到畏懼。在這里在下向各位介紹一下,Java與.NET相互調(diào)用的例子。下面的介紹主要包括三方面:一是通過(guò)常用Web服務(wù)進(jìn)行相互調(diào)用,二是使用TCP/IP套接字進(jìn)行相互調(diào)用,三是使用Remote實(shí)現(xiàn)遠(yuǎn)程對(duì)象相互調(diào)用。
在這章里面先為大家介紹一下最簡(jiǎn)單,最常用的Web服務(wù)相互調(diào)用方式。首先說(shuō)一下Web服務(wù)的來(lái)源,Web服務(wù)是一種新的Web應(yīng)用程序分支,可以執(zhí)行從簡(jiǎn)單的請(qǐng)求到復(fù)雜商務(wù)處理等任何功能。一旦部署以后,其他Web服務(wù)應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。 Web Service是一種應(yīng)用程序,它可以使用標(biāo)準(zhǔn)的互聯(lián)網(wǎng)協(xié)議,像超文件傳輸協(xié)議(HTTP)、簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(SOAP)、XML等,將功能綱領(lǐng)性地體現(xiàn)在互聯(lián)網(wǎng)和企業(yè)內(nèi)部網(wǎng)上,Web服務(wù)被視作是Web上的組件編程。Web服務(wù)必須提供一套標(biāo)準(zhǔn)的類(lèi)型系統(tǒng),用于溝通不同平臺(tái)、編程語(yǔ)言和組件模型中的不同類(lèi)型系統(tǒng)。
XML和XSD
可擴(kuò)展的標(biāo)記語(yǔ)言XML 是Web Service平臺(tái)中表示數(shù)據(jù)的基本格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既與平臺(tái)無(wú)關(guān),又與廠商無(wú)關(guān)。XML是由萬(wàn)維網(wǎng)協(xié)會(huì)(W3C)創(chuàng)建,W3C制定的XML SchemaXSD 定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類(lèi)型。 Web Service平臺(tái)是用XSD來(lái)作為數(shù)據(jù)類(lèi)型系統(tǒng)的。當(dāng)你用某種語(yǔ)言如Java、C#來(lái)構(gòu)造一個(gè)Web Service時(shí),為了符合Web Service標(biāo)準(zhǔn),所有你使用的數(shù)據(jù)類(lèi)型都必須被轉(zhuǎn)換為XSD類(lèi)型。如想讓它使用在不同平臺(tái)和不同軟件的不同組織間傳遞,還需要通過(guò)SOAP協(xié)議將它包裝起來(lái)。
SOAP
SOAP即簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級(jí)協(xié)議。它有三個(gè)主要方面:XML-envelope為描述信息內(nèi)容和如何處理內(nèi)容定義了框架,將程序?qū)ο缶幋a成為XML對(duì)象的規(guī)則,執(zhí)行遠(yuǎn)程過(guò)程調(diào)用(RPC)的約定。SOAP可以運(yùn)行在任何其他傳輸協(xié)議上。例如,你可以使用 SMTP,即因特網(wǎng)電子郵件協(xié)議來(lái)傳遞SOAP消息,這可是很有誘惑力的。在傳輸層之間的頭是不同的,但XML有效負(fù)載保持相同。Web Service 希望實(shí)現(xiàn)不同的系統(tǒng)之間能夠用“軟件-軟件對(duì)話(huà)”的方式相互調(diào)用,打破了軟件應(yīng)用、網(wǎng)站和各種設(shè)備之間的格格不入的狀態(tài),實(shí)現(xiàn)“基于Web無(wú)縫集成”的目標(biāo)。
WSDL
Web Service描述語(yǔ)言WSDL 就是用機(jī)器能閱讀的方式提供的一個(gè)正式描述文檔而基于XML的語(yǔ)言,用于描述Web Service及其函數(shù)、參數(shù)和返回值。因?yàn)槭腔赬ML的,所以WSDL既是機(jī)器可閱讀的,又是人可閱讀的。
下面分開(kāi)兩個(gè)方面講解一下如果通過(guò)Web服務(wù)實(shí)現(xiàn)Java與.NET的相互調(diào)用。
一、使用.NET作為服務(wù)器端,Java作為客戶(hù)端實(shí)現(xiàn)相互調(diào)用。
在.NET系統(tǒng)里面,以WCF作為新一代的服務(wù)開(kāi)發(fā)工具是微軟的一個(gè)新賣(mài)點(diǎn),我們就以WCF為例子實(shí)現(xiàn)服務(wù)器端,首先新建一個(gè)網(wǎng)站項(xiàng)目,在網(wǎng)站添加一個(gè)WCF服務(wù)PersonService。你將看到PersonService.svc、IPersonService、PersonService.cs三個(gè)文件,其中IPersonService是對(duì)向暴露一個(gè)接口,接口的功能由PersonService來(lái)實(shí)現(xiàn),客戶(hù)端則通過(guò)PersonalService.svc來(lái)尋獲服務(wù),并對(duì)其添加引用的。
//在PersonService.svc里,只包括一行,其中列明了該服務(wù)的實(shí)現(xiàn)類(lèi)
<%@ ServiceHost Language="C#" Debug="true" Service="Service.PersonService" CodeBehind="~/App_Code/PersonService.cs" %>
//服務(wù)的實(shí)現(xiàn)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
// 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼和配置文件中的接口名“IPersonService”。
namespace Service
{
[ServiceContract]
public interface IPersonService
{
[OperationContract]
IList<Person> GetList();
}
public class PersonService : IPersonService
{
public IList<Person> GetList()
{
IList<Person> personList = new List<Person>();
Person person1 = new Person();
person1.ID = 0;
person1.Age = 27;
person1.Name = "Leslie";
personList.Add(person1);
Person person2 = new Person();
person2.ID = 1;
person2.Age = 23;
person2.Name = "Rose";
personList.Add(person2);
Person person3 = new Person();
person3.ID = 2;
person3.Age = 29;
person3.Name = "Jack";
personList.Add(person3);
return personList;
}
}
}
NET技術(shù):JAVA與.NET的相互調(diào)用——通過(guò)Web服務(wù)實(shí)現(xiàn)相互調(diào)用,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。