Introduction til.net remoting i VB.NET

Relaterede dokumenter
Introduction til.net remoting i C#

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Singleton pattern i C#

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

Singleton pattern i Java

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

Arkitektur for begyndere

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Geografisk lokalisering i ASP.NET

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Introduktion til NAnt

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Undtagelseshåndtering i C#

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Anvendelse af metoder - Programmering

Indhold. Senest opdateret:03. september Side 1 af 8

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Logging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten.

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Indhold. Senest opdateret : 30. juli Side 1 af 5

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni jun 2011 MapBasic &.

Udvikling af DOTNET applikationer til MicroStation i C#

At klippe en streng over på det mest hensigtsmæssige sted

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Introduktion til ant. Denne artikel beskriver Apache ant, som er et værktøj til at builde Java applikationer med.

Nye Java XML API'er

Bits, bit operationer, integers og floating point

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Overblik over udviklingen af.net frameworket. - et kig på de vigtigste nyheder i de seneste versioner

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

SAX Simple API for XML.

Vejledning til Retsinformation web services test stubs

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

Note om RMI af Peter Kjærsgaard

Hvad er Objekter - Programmering

Plugin-arkitektur med.net

Upload af billeder/filer for nybegyndere Del. 2

Java Klasse nedarvninger

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU semester 11. desember 2007

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Database design for begyndere

Hvordan vælger jeg dokumentprofilen?

Endnu mere om tilfældige tal

Hvad er et distribueret objekt? Plan Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Math Snake. Afsluttende projekt. Andreas Kær Eriksen, Niclas Larsen og Jens Werner Nielsen. Klasse maj Informationsteknologi B

Java web applikationer med Tomcat

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

Hvilket sprog er hurtigst

IT projekt person galleri

Datatekniker med programmering som speciale

CodeDOM - Dynamisk generering og kompilering af kode

Forskellige Java versioner

Delphi - CrackMe og Keygen

I denne artikel vil jeg gennemgå hvordan en side for RSS "Live Bogmærke" kan se ud.

Introduktion til AOP i C#

Visual Basic for begyndere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Distribuerte Objekter. Våren 2010 Professor II Eric Jul F

educasoft - en professionel samarbejdspartner med speciale i uddannelse!

Ugeseddel 4 1. marts - 8. marts

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling

Lektion 6. Grundlæggende programmering i VR

Introduktion til funktioner, moduler og scopes i Python

Videregående programmering i Java

Abstrakte datatyper C#-version

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Webserverprogrammering

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

DM507 Algoritmer og datastrukturer

Dynamiske Billeder, Image Map & XY coordinater. ASP.NET og Access Databasen.

ADIS, WS og Meta Service

Introduktion til SQL queries

SWC Elementer i klassedefinition

Tredjepart webservices

Software Construction 1 semester (SWC) Spørgsmål 1

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.

Artiklen er udgivet under "Åben dokumentlicens (ÅDL) - version 1.0" som kan læses på Du har bl.a. herved frit lov

Installations guide Saxo ERPTrader. Microsoft Dynamics NAV 2009 / 2013 / 2013R2

Delphi og Databaser for begyndere

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Introduktion til Flash, fortsat

Tech College Aalborg. ASP.NET Hjemmeside. Projekt Smart Zenior Home - Guide til ASP.NET hjemmeside med Visual Studio

Objektorienterede metoder

Hvilket sprog skal jeg lære?

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Introduktion til ActionScript, fortsat

Hvilket sprog skal jeg lære?

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Videregående programmering i Java

14.1 Internationale programmer

Transkript:

Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter kendskab til VB.NET. Der er en anden artikel med præcis samme indhold bare i C#! Skrevet den 03. Feb 2009 af arne_v I kategorien Programmering / Visual Basic.NET Historie: V1.0-08/02/2004 - original V1.1-09/02/2004 - forbedret formatering V1.2-11/04/2004 - tilføj avanceret eksempel Baggrund.NET remoting svarer konceptuelt til Java RMI, men har dog en noget anderledes implementering..net remoting bygger på det såkaldte Proxy Pattern (et af de originale patterns fra Design Patterns af Erich Gamma m.fl.). Ideen er at en client kan kalde remote server kode på samme måde som lokal kode. Selve kaldet foregår som: client kode--stub kode--(netværk)--skeleton kode--server kode Stub koden har samme interface som server koden. Stub koden pakker alle argumenter ned (serialiserer) og sender dem over en socket til skeleton koden. Skeleton koden udpakker alle argumenter (deserialiserer) og kalder server koden. Retur værdien sende tilbage på samme vis bare modsat. Både stub og skeleton koden er 100% dynamisk i.net frameworket. (der skal ikke genereres noget kode). Man skelner mellem: SAO (Server Activated Objects) CAO (Client Activated Objects) Og med SAO skelner man mellem: SingleCall Singleton SAO Singlecall betyder at der instantieres et remote objekt per kald.

SAO Singleton betyder at der instantieres et enkelt remote objekt ad gangen (bemærk at det ikke er et ægte singleton objekt - det kan blive garbage collectet og et nyt objekt instantieret - der er bare aldrig mere end et ad gangen). CAO betyder at der instantieres et remote objekt hver gang klienten instantierer et lokalt objekt. Eksempler Lad os tage nogle eksempler. Calc.vb (fælles for alle 3 eksempler) Public Class Calc Inherits MarshalByRefObject Private no As Integer Private Shared total As Integer = 0 Private sync As Object = New Object Public Sub New() SyncLock sync total = total + 1 no = total End SyncLock Public Function add(byval a As Integer, ByVal b As Integer) As Integer Return (a + b) End Function Public Function mul(byval a As Integer, ByVal b As Integer) As Integer Return (a * b) End Function Public ReadOnly Property ID() As String Get Return (no & " of " & total) End Get End Property SAO Singlecall: Server1.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp

Class Server1 ChannelServices.RegisterChannel(New TcpServerChannel (50000)) RemotingConfiguration.RegisterWellKnownServiceType(GetType(Calc), "Calc", WellKnownObjectMode.SingleCall) Console.Write("Press enter to exit") Console.ReadLine Client1.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp Class Client1 Private Shared Sub test1() Dim clc As Calc = CType(Activator.GetObject(GetType(Calc), "tcp://localhost:50000/calc"), Calc) Private Shared Sub test2() Dim clc As Calc = CType(RemotingServices.Connect(GetType(Calc), "tcp://localhost:50000/calc"), Calc) Private Shared Sub test3() RemotingConfiguration.RegisterWellKnownClientType(GetType(Calc), "tcp://localhost:50000/calc") Dim clc As Calc = New Calc ChannelServices.RegisterChannel(New TcpClientChannel ) test1 test2 test3

build vbc /optimize+ /t:library /out:calc.dll Calc.vb /out:server1.exe Server1.vb /out:client1.exe Client1.vb SAO Singleton: Server2.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp Class Server2 ChannelServices.RegisterChannel(New TcpServerChannel (50000)) RemotingConfiguration.RegisterWellKnownServiceType(GetType(Calc), "Calc", WellKnownObjectMode.Singleton) Console.Write("Press enter to exit") Console.ReadLine Client2.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp Class Client2 Private Shared Sub test1() Dim clc As Calc = CType(Activator.GetObject(GetType(Calc), "tcp://localhost:50000/calc"), Calc) Private Shared Sub test2() Dim clc As Calc = CType(RemotingServices.Connect(GetType(Calc), "tcp://localhost:50000/calc"), Calc)

Private Shared Sub test3() RemotingConfiguration.RegisterWellKnownClientType(GetType(Calc), "tcp://localhost:50000/calc") Dim clc As Calc = New Calc ChannelServices.RegisterChannel(New TcpClientChannel ) test1 test2 test3 build vbc /optimize+ /t:library /out:calc.dll Calc.vb /out:server2.exe Server2.vb /out:client2.exe Client2.vb CAO: Server3.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp Class Server3 ChannelServices.RegisterChannel(New TcpServerChannel (50000)) RemotingConfiguration.ApplicationName = "Calc" RemotingConfiguration.RegisterActivatedServiceType(GetType(Calc)) Console.Write("Press enter to exit") Console.ReadLine Client3.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp

.Runtime.Remoting.Activation Class Client3 Private Shared Sub test1() Dim clc As Calc = CType(Activator.CreateInstance(GetType(Calc), Nothing, New Object() {New UrlAttribute ("tcp://localhost:50000/calc")}), Calc) Private Shared Sub test2() RemotingConfiguration.RegisterActivatedClientType(GetType(Calc), "tcp://localhost:50000/calc") Dim clc As Calc = New Calc ChannelServices.RegisterChannel(New TcpClientChannel ) test1 test2 build vbc /optimize+ /t:library /out:calc.dll Calc.vb /out:server3.exe Server3.vb /out:client3.exe Client3.vb Avanceret eksempel Vi laver nu et eksempel med: - SAO Singleton - adskillelse af interface og implementation - 2 forskellige implementationer - configurations fil på server side - brug af namespaces X.vb Namespace X.Common ' interface Public Interface IX Function WhoAmI() As String

End Interface End Namespace XImpl.vb Imports X.Common Namespace X.Impl ' implementation ' skal extende MarshalByRefObject og interfacet Public Class XRealA Inherits MarshalByRefObject Implements IX Public Function WhoAmI() As String Implements IX.WhoAmI Return "I am A" End Function ' implementation ' skal extende MarshalByRefObject og interfacet Public Class XRealB Inherits MarshalByRefObject Implements IX Public Function WhoAmI() As String Implements IX.WhoAmI Return "I am B" End Function End Namespace XServer.vb.Runtime.Remoting Namespace X.Server ' server klasse Class XServer ' konfigurer RemotingConfiguration.Configure("XServer.exe.config") Console.Write("Press enter to exit") Console.ReadLine End Namespace

XServer.exe.config <configuration> <system.runtime.remoting> <application name="xserver"> <service> <wellknown mode="singleton" type="x.impl.xreala, XImpl" objecturi="a"/> <wellknown mode="singleton" type="x.impl.xrealb, XImpl" objecturi="b"/> </service> <channels> <channel port="50000" ref="tcp"/> </channels> </application> </system.runtime.remoting> </configuration> XClient.vb.Runtime.Remoting.Runtime.Remoting.Channels.Runtime.Remoting.Channels.Tcp Imports X.Common Namespace X.Client ' test client klasse Class XClient ' test ChannelServices.RegisterChannel(New TcpClientChannel ) Dim a As IX = CType(Activator.GetObject(GetType(IX), "tcp://localhost:50000/a"), IX) Console.WriteLine(a.WhoAmI) Dim b As IX = CType(Activator.GetObject(GetType(IX), "tcp://localhost:50000/b"), IX) Console.WriteLine(b.WhoAmI) End Namespace build vbc /optimize+ /t:library /out:x.dll X.vb vbc /optimize+ /t:library /r:x.dll /out:ximpl.dll XImpl.vb vbc /optimize+ /t:exe /out:xserver.exe XServer.vb vbc /optimize+ /t:exe /r:system.runtime.remoting.dll /r:x.dll /out:xclient.exe XClient.vb

Videre.NET frameworket indeholder et meget sofistikeret framework af channels, sinks og formatters som gøre det muligt at bruge remoting på næsten uendeligt mange måder. Kommentar af kichian d. 09. Feb 2004 1 Hmm. En hurtig intro til emnet. Men hvorfor benyttes der ikke interfaces i mindst et eksempel for at vise uafhængigheden imellem klienten og serverimplementation. Kommentar af wired d. 28. Jul 2004 2 Savner også en UI eksempel.