Toon posts:

[.NET][C#] Remoting broadcast

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben al een tijdje op zoek naar code om het volgende voor elkaar te krijgen, maar ik kan nergens iets vinden. Er is uberhaupt vrij weinig te vinden over remoting buiten de standaard dingetjes. Ook heb ik gezocht naar boeken waar iets van dit in zou moeten staan, maar vooralsnog niets gevonden.

Wat ik wil doen is het volgende:

Broadcasten op het lokaal netwerk om een server te vinden die een bepaalde service biedt.

Mijn situatie is als volgt:

Er is 1 server op een lokaal netwerk (alles binnen 1 subnet binnen 1 collision domein, het gaat om tussen de 10 en 20 PC's) maar het IP adres en de hostname van deze server is onbekend. Deze server biedt via remoting een bepaald object aan via RemotingServices.Marshal, dit object hebben de clients nodig.

Nu is het zo dat er bij het opstarten van de client het IP adres of hostname van de server moet worden ingevuld zodat deze verbinding kan maken. Op zich een prima oplossing, maar niet echt gebruikersvriendelijk. Het varieert per situatie welke server er moet worden aangesproken, de gegevens worden nu wel opgeslagen, maar daardat het wel eens wil veranderen wordt het nog altijd gevraagd.

Wat ik graag zou willen is een situatie vergelijkbaar met DHCP, de client broadcast een request naar een bepaalde service over het netwerk en bij antwoord wordt die server gebruikt om verbinding mee te maken en ermee te doen wat nodig is.

Ik had verwacht dat er in .NET zoiets zou zitten, maar kan echt helemaal niets vinden.
Kijk ik er zo enorm overheen?

Als er geen makkelijke manier mogelijk is dan is dat ook prima, het werkt op zich goed zoals het werkt, maar ik kan niet geloven dat zoiets heel ingewikkeld kan zijn in .NET.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Zoiets ?

https://fgheysels.github.io/


  • lier
  • Registratie: Januari 2004
  • Laatst online: 09:54

lier

MikroTik nerd

Mooi verhaal, maar wat heb je nou precies geprobeerd ?
Lukt het broadcasten niet ?

Even conceptueel: stuur een broadcast met als parameter de service naam. Je zal met events kunnen werken en het geheel asynchroon houden.

edit:
Sneller typen...

[ Voor 6% gewijzigd door lier op 23-03-2007 14:55 ]

Eerst het probleem, dan de oplossing


Verwijderd

Topicstarter
Uit 2002 :X

Maar wat daar gebruikt wordt is een soort van globale registry service waarbij iedere service geregistreerd wordt waarna er gezocht kan worden naar een bepaalde service in die registry.

Ik heb daar ook over nagedacht, op zich eenvoudig te programmeren maar het probleem daarmee is dat je dan nog steeds moet verbinden naar 1 vaste server. Er is in de opzet geen vaste server beschikbaar, zowel het IP adres als de hostname is steeds anders. Was dit niet het geval geweest dan was er geen probleem geweest.
lier schreef op vrijdag 23 maart 2007 @ 14:54:
Mooi verhaal, maar wat heb je nou precies geprobeerd ?
Lukt het broadcasten niet ?

Even conceptueel: stuur een broadcast met als parameter de service naam. Je zal met events kunnen werken en het geheel asynchroon houden.

edit:
Sneller typen...
Je wil zeggen zelf low-level op het netwerk gaan broadcasten etc..

Dat is niet echt de oplossing die ik zoek, zoals gezegd, als er geen eenvoudige wijze is dan is de huidige situatie voldoende. Maar het lijkt me dat hier gewoon een simpele high-level .NET remoting oplossing is.

Iets van RemotingServices.Discovery("Servicenaam") oid..

[ Voor 33% gewijzigd door Verwijderd op 23-03-2007 14:57 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Bij het remoting concept is er afaik toch vanuit gegaan dat je het endpoint kent.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Daar kom ik achter ja.

Jammer hoor, zoiets lijkt me toch echt behoorlijk basic dat ze dat niet even erin hebben gezet.

Op zich is het met een 10 regels code op de client en 10 regels code op de server op te lossen, maar van high-level kun je dan niet meer spreken.

What's next, moet ik zelf mijn geheugen gaan beheren? :+

Zal mijn contactpersoon bij Microsoft eens vragen waar ik suggesties voor de volgende versie van .NET kan aangeven. Zoiets simpels moeten ze toch in no-time kunnen toevoegen.

[ Voor 21% gewijzigd door Verwijderd op 23-03-2007 15:07 ]


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 11:02
Ik heb zoiets ook al eens moeten maken.

Het scenario was: er zijn veel pc's die een windows service hosten met daarbinnen een remote object (MarshallByRef), dit zijn de servers. Er is 1 client die een ping verstuurt om na te gaan welke servers aanwezig zijn, het zogenaamde ping-pong'en. Dit ping-pong'en gebeurt op een afgesproken poortnummer (client 7600, server 7601 bijv.) Indien de IP adressen bekend zijn van de servers kan de gebruiker een keuze maken waarmee gecommuniceerd kan worden. Met een nieuwe actie van de gebruiker wordt voor elk gekozen pc (lees: IP adres) een remote object benaderd via een nieuw afgesproken poort. Ik bouw de URI dynamisch op.

Het ping-pong'en doe je met een UDP client, daarmee is de broadcast ook mogelijk.

[ Voor 85% gewijzigd door DrDelete op 23-03-2007 16:14 ]


Verwijderd

Topicstarter
Ja inderdaad, ik heb er even naar zitten kijken, maar met 10 regels haal je het niet, eerder een stuk of 20.

In mijn geval is er maar 1 server, dus de eerste die antwoord geeft is goed.

Ik zou dan op de server een luisterende UDP socket moeten maken op een bepaalde poort, de client moet dan het request broadcasten en ook luisteren op een UDP poort, vervolgens moet de server zichzelf bekendmaken.

Ook moet er een timeout aan verbonden worden zodat we eventueel alsnog om een IP aan de gebruiker kunnen vragen.

[ Voor 18% gewijzigd door Verwijderd op 23-03-2007 16:52 ]

Pagina: 1