[PHP/C#] PHP variabele aan C# exe doorgeven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 07-09 21:38

Shapeshifter

Get it over with

Topicstarter
Ik probeer een afstandsbediening te maken voor mijn MediaCenter die over het internet werkt. Hiervoor heb ik een C# applicatie geschreven die alle mediaspelers e.d. op mijn MediaCenter kan aansturen, deze wordt op zijn beurt weer bestuurd door een serverapplicatie op mijn server. Op deze server draait een PHP server (XAMPP) met een webpagina waarop ik de bediening wil weergeven.

Dus: Webpagina (PHP) -> Serverapplicatie (C#) -> Clientapplicatie op MediaCenter (C#) -> Mediaspelers e.d.

Alle schakels werken nu behalve de communicatie tussen de webpagina en de serverapplicatie. Ik heb rondgezocht op google en gathering maar kon niet veel meer vinden dan een referentie naar proc_open() (waarvan ik even niet in zie hoe ik hem moet gebruiken gezien de serverapplicatie gewoon in Windows opgestart wordt en niet door PHP). Ik heb nagedacht over de applicatie starten met een commandline option, maar dan wordt de serverapplicatie telkens opnieuw opgestart en dat lijkt een beetje overbodig. Een andere optie is om PHP de commando's in een tekstbestand (oid) te laten schrijven dat steeds uitgelezen wordt door de serverapplicatie (maar ook dit lijkt me onnodig intensief).

Dus, samenvatting: Is er een goede manier om vanuit een PHP document data te sturen naar een C# applicatie?

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:00
In principe kun je dit relatief eenvoudig doen met SOAP. PHP heeft er een client voor en in C# is het ongetwijfeld niet al te lastig een server ervoor op te zetten.

Alternatief kun je ook handmatig sockets gaan openen of een DB gebruiken (met een push/pull model), maar waarschijnlijk kost dat meer moeite :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 07-09 21:38

Shapeshifter

Get it over with

Topicstarter
Nu je het zegt, daar kwam ik ook wat pagina's over tegen. Ik dacht eerst even dat het meer voor webservices bedoeld was, maar volgens deze site kun je applicaties ook gewoon met de PHP SOAPserver laten verbinden. Ik ga er eens naar kijken, bedankt.

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 01:00
In principe is het daar ook voor bedoelt en zijn er wel efficientere opties (heck, als je het proces opent in PHP met proc_open kun je direct naar de I/O streams schrijven) maar zoals je al opmerkt: dat werkt niet handig met alle losse requests die je normaliter met PHP hebt. Het is een ramp om uberhaupt een process-ID op te halen in PHP (wel eens gedaan met pstools, daarmee kun je het in principe ook doen), laat staan een lopend proces beinvloeden. SOAP is dan een erg simpele manier om te doen wat je wilt, zonder rare fratsen uit te hoeven halen, en zeker voor PHP werkt de native client erg lekker. Bovendien kun je dan later ook nog simpel een zelfgeschreven GUI app eraan koppelen, als je bijvoorbeeld zoals ik je mediacentre wilt bedienen met een iPod (lang, lang geleden toen er nog geen XBMC remote apps voor waren :+).

Let er wel op dat je in jou geval juist andersom wilt werken dan waar je naar linkt: je C# server zal een SOAP service aanbieden die je met PHP consumed.

Overigens zou je er ook aan kunnen denken direct een GUI te schrijven voor je C# app: waarom de webserver laag ertussen laten?

[ Voor 5% gewijzigd door FragFrog op 29-01-2011 01:45 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 07-09 21:38

Shapeshifter

Get it over with

Topicstarter
Gek genoeg kan ik weinig duidelijke informatie vinden over het opzetten van een C# SOAP server (wel legio over een PHP server en C# client). Kijk ik hier in de goede richting?

De reden dat er een webserver tussenzit is omdat er al een PHP infrastructuur aanwezig is (die ik niet ga ombouwen tot C#).

[ Voor 18% gewijzigd door Shapeshifter op 29-01-2011 14:20 ]

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 18:39

Matis

Rubber Rocket

Toevallig heb ik niet zo heel lang geleden een zelfde vraag gesteld hier op het forum: GUI laten communiceren met C-applicatie

Daarin staan een aantal mooie IPC-frameworks voor PHP benoemd, die jij zeker in C# zou kunnen gebruiken.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Als je WCF gebruikt kun je je C#-applicatie SOAP-verzoeken laten afhandelen.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Shapeshifter
  • Registratie: Januari 2004
  • Laatst online: 07-09 21:38

Shapeshifter

Get it over with

Topicstarter
Ik wilde nog even laten weten dat het inmiddels gelukt is met behulp van dit voorbeeld. Mocht iemand dit in de toekomst nog nodig hebben, voor gebruik met PHP dien je new WSHttpBinding() te veranderen in new BasicHttpBinding(). Vervolgens kun je met PHP de SOAP-server aanroepen:

PHP:
1
2
3
4
5
6
<?php
$client = new SoapClient("http://localhost:8000/ServiceModelSamples/Service?wsdl");
$result = $client->Add(array("n1" => 1, "n2" => 1));

echo($result->AddResult);
?>


Denk er aan dat bij dit voorbeeld de SOAP-server en de PHP-client op dezelfde server draaien (en ik me maar afvragen waarom er niets gebeurde, behoorlijk d'oh moment :P)! Bedankt voor de aanwijzingen iedereen.

Edit: Oja, denk er ook aan dat de server Administratorrechten nodig heeft, dus VisualStudio even als Admin draaien (en de gereleasde .exe natuurlijk ook)...

[ Voor 9% gewijzigd door Shapeshifter op 02-02-2011 18:56 . Reden: Protip ]

HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m

Pagina: 1