Søger du en specifik kategori?

 



Oprettet ons. d. 04. februar 2009 kl. 01:10

arne_v
arne_v (1.016.094 point)
Guidens karaktér
1
2
3
4
5
Mangler vurderinger

.NET og Java interoperabilitet II

Denne artikel beskriver hvordan .NET og Java applikationer kan kommunikere via web services. Artikel I beskriver sockets. Den forudsætter lidt erfaring med både C#/VB.NET og Java.
Historie:
V1.0 - 14/11/2004 - original

Indledning

Web services er meget hot for tiden. Alle snakker om dem. Og om
det nært beslægtede begreb SOA (Service Oriented Architecture).
SOA behøver ikke være web services men idag vil det typisk være det.

Visionen er at lade løst koblede systemer kommunikere på
tværs af platforme og teknologier ved hjælp af standarder
der gør det muligt fuldstændigt at skjule det bagvedliggende.

Det lyder måske lidt højtravende. Men det er faktisk muligt.

Alt har dog sin pris. Og web services koster i krav til
system resourcer.

Web services kan være andet end SOAP over HTTP, men i nedenstående
vil jeg kun kigge på det.

Web services er et godt valg hvis:
* volumen er lav eller medium
* det er komplekse objekt orienterede data strukturer
* man ønsker at skrive mindst muligt kode
* det er mindre data mængder
* det kan være WAN traffik
* man ønsker ikke at antage noget om systemet i den anden ende

Vigtige noter

Inden jeg går igang med eksemplerne vil jeg lige komme med
et par vigtige betragtninger af generel karakter.

Forsøg ikke på at skrive/læse SOAP messages eller WSDL beskrivelsem
manuelt som XML. Det er alt for komplekst til at skrive/læse selv. Brug
nogle biblioteker eller web service toolkits til det. .NET SDK kommer med der
fornødne. Til Java vil jeg anbefale at bruge Apache Axis toolkit.
Et RPC kald med SOAP over HTTP bruger XML som transport, men
programmøren bør ikke se noget XML overhovedet.

Fordi noget kan publiceres som web service behøver det ikke være
standard / teknologi netralt. Så tænk over hvilke data typer
du bruger. .NET System.Collections.Hashtable og java.util.HashMap
svarer måske nok nogenlunde til hinanden. Men SOAP standarden
kan ikke finde ud af det. Nøjes med de helt standard ting: array,
struct/class, integer, string, float, double, char, byte. Hvis
du er interesseret i at undersøge dette emne mere så check WS-I
(Wen Services - Interoperability) standarden. Hvis du ikke vil
følge standarden og være teknologi neutral, så kan du lige så
godt vælge en teknologi specifik løsning som .NET remoting
eller Java RMI. De performer meget bedre.

.NET client, Java server

Server.jws:

public class Server {
    public int add(int a, int b) {
        return (a + b);
    }
    public String dup(String s) {
        return (s + s);
    }
}


Build og deploy:

kopier Server.jws til roden af Axis web app (Axis ordner resten)

(en professionel IDE som f.eks. Borland JBuilder Enterprise Edition
kan naturligvis deploye Axis web services direkte fra IDE'en - og selv
uden IDE kan man gøre det via ant)

Test.cs:

using System;

class Test
{
    public static void Main(string[] args)
    {
        ServerService ss = new ServerService();
        Console.WriteLine(ss.add(12, 34));
        Console.WriteLine(ss.dup("abc"));
    }
}


Stub generering, build og run:

wsdl /language:cs http://localhost:8080/ (...)
csc /t:exe Test.cs ServerService.cs
Test

Test.vb:

Imports System

Class Test
    Public Shared Sub Main(ByVal args As String())
        Dim ss As ServerService = New ServerService
        Console.WriteLine(ss.add(12, 34))
        Console.WriteLine(ss.dup("abc"))
    End Sub
End Class


Stub generering, build og run:

wsdl /language:vb http://localhost:8080/ (...)
vbc /r:System.dll /r:System.Xml.dll /r:System.Web.Services.dll /t:exe Test.vb ServerService.vb
Test

Java client, .NET server

Server.asmx:

<%@ WebService Class="Server" %>


Server.cs:

using System;
using System.Web.Services;

public class Server : WebService
{
    [WebMethod]
    public int Add(int a, int b)
    {
        return (a + b);
    }
    [WebMethod]
    public string Dup(string s)
    {
        return (s + s);
    }
}


Build og deploy:

csc /t:library Server.cs
kopier .asmx og .dll til IIS dir og bin subdir

(en professionel IDE som Visual Studio .NET Enterprise må kunne
deploye web services direkte fra IDE'en)

Server.vb:

Imports System
Imports System.Web.Services

Public Class Server
Inherits WebService
    <WebMethod()> _
    Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
        Return (a + b)
    End Function

    <WebMethod()> _
    Public Function Dup(ByVal s As String) As String
        Return (s + s)
    End Function
End Class


Build og deploy:

vbc /r:System.dll /r:System.Xml.dll /r:System.Web.Service s.dll /t:library Server.vb
kopier .asmx og .dll til IIS dir og bin subdir

(en professionel IDE som Visual Studio .NET Enterprise må kunne
deploye web services direkte fra IDE'en)

Test.java:

import org.tempuri.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Server s = new ServerLocator();
        ServerSoap ss = s.getServerSoap();
        System.out.println(ss.add(12, 34));
        System.out.println(ss.dup("abc"));
    }
}


Stub generering, build og run:

set AXISLIBS=\Jakarta\Axis-1_1\lib\axis.jar;\Jakarta\Axis-1_1\lib\commons-logging.jar;\Jakarta\Axis-1_1\lib\log4j-1.2.8.jar;\Jakarta\Axis-1_1\lib\commons-discovery.jar;\Jakarta\Axis-1_1\lib\wsdl4j.jar;\Jakarta\Axis-1_1\lib\jaxrpc.jar;\Jakarta\Axis-1_1\lib\saaj.jar
java -classpath %AXISLIBS% org.apache.axis.wsdl.WSDL2Java http://localhost/ (...)
cd org\tempuri
javac -classpath %AXISLIBS% *.java
cd ..\..
javac -classpath .;%AXISLIBS% Test.java
java -classpath .;%AXISLIBS% Test

(en professionel IDE som f.eks. Borland JBuilder Enterprise Edition
kan naturligvis gøre det hele fra IDE'en - og selv uden IDE kan man gøre
det via ant)

Konklusion

Web services mellem .NET og Java er nemt. Meget nemt.

Man skal ikke skrive ret meget kode, fordi:
  - web service toolkittene håndterer konvertering til og fra SOAP XML
  - containeren (IIS/Tomcat eller anden servlet engine) håndterer thread creation

Ovenstående eksempel er selvfølgelig urealistisk simpelt, men selve
interaktionen .NET og Java bliver faktisk ikke ret meget mere kompleks
selv med realistiske eksempler.

Skrevet fre. d. 19. november 2004 kl. 23:13| #1

Kunne godt tænke mig at se et mere komplekst eksempel men ellers er det godt.

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger