2009-06-01 8 views
1

Ich habe einen Windows-Dienst, der eine bestimmte Funktion ausführt und diese Informationen dann zur Verarbeitung an einen Webdienst senden muss. Der Webservice wird von einer Remote-Webanwendung gehostet. Ich versuche herauszufinden, wie der Webservice am besten aufgerufen werden kann, da jede Webanwendung nur 2.0 oder 3.5 usw. sein kann. In meinem Windows-Dienst definiere ich jeden "Client" in der app.config, z.Welche zu verwenden ... REST, ASMX, WSE oder WCF?

<Client WebServiceUrl="http://location.com/webservice.svc" Username="" Password=""> 

</Client> 

Die Web-Anwendung muss zwei Web-Services implementieren, die für meine Windows-Dienst erforderlich sind, zu laufen, aber nicht sicher, ob der beste Weg, die „Regeln“ für die Web-Anwendung zu implementieren.

EDIT:

Ich werde versuchen, und umformulieren .. Der Windows-Dienst läuft alle 30 Sekunden und erhält eine Liste von Informationen. Der Service unterstützt mehrere "Clients" wie oben gezeigt. Wenn jeder Clientprozess ausgeführt wird, werden die Daten gesammelt und müssen dann an die unterstützende Webanwendung gesendet werden.

Der Windows-Dienst weiß nicht, was mit den Daten zu tun ist, es sendet es nur. Jede Webanwendung für einen Client wäre an verschiedenen Orten und könnte möglicherweise in 2.0, 3.5, PHP, etc. gebaut werden. Alles, was der Windows-Dienst interessiert, ist, dass, wenn er seine Verarbeitung für einen Client durchführt, er die Daten an den Webservice-Standort, der in der app.config des Windows-Dienstes definiert ist.

Ich versuche festzustellen, wie man sich mit dem Webservice verbinden kann (was ich zu WCF tendiere, egal wie Basic oder WS nicht sicher sind), und welche Regeln für die Webanwendung in der Erstellung definiert werden müssen die Antwort.

Wenn der Windows-Dienst PHP-Anwendungen usw. unterstützen soll, wäre WSHttpBinding keine Option, was bedeuten würde, dass BasicHttpBinding dann funktionieren würde. Die andere Entscheidung ist, ob ein RESTful-Service oder SOAP-Service verwendet werden soll oder nicht.

Hope das macht mehr Sinn.

+0

Ich fürchte, dass ich die Frage nicht ganz verstehe. Ist Ihr Verweis auf 2.0, 3.5 usw. über einem Verweis auf .NET Framework-Versionen? Sagen Sie, dass Ihr Windows-Dienst möglicherweise eine Vielzahl verschiedener Webanwendungen aufrufen muss, von denen jede auf unterschiedliche Weise implementiert wird? Oder implementieren Sie die Webdienste und versuchen Sie, den besten Ansatz zu finden? – sfitts

+0

yup, micky vielleicht kannst du die Frage wiederholen, weil es mir auch nicht klar ist. – Cheeso

+0

ok also, wenn du "Client" sagst, meinst du wirklich "zahlender Kunde", und in der Tat ist der "Client", was wir einen "Server" im verteilten Systemdesign nennen würden. – Cheeso

Antwort

10

Ich bin nicht wirklich klar, was Sie tun.

Es scheint, als ob Sie 3 Dinge haben: Ein Windows-Dienst und dann ein Web-Service, gehostet in einer Web-App.
Ich denke, Ihre Frage ist, was zu verwenden, REST, ASMX, WSE oder WCF, wenn die Windows-Dienstanwendung mit dem Remote-Webdienst verbinden.

ASMX, WSE und WCF sind alternative Programmiermodelle für den Webservice. REST ist kein Programmiermodell. Es ist nicht wie die anderen drei.

Für ASMX und WSE müssen Sie Webdienste und SOAP verwenden.
Mit WCF können Sie unter anderem Webdienste und SOAP, REST (XML oder JSON) über HTTP oder ein Binärformat über TCP verwenden.

Da es flexible und aktuelle Technologie ist, würde ich WCF empfehlen. ASMX wird jetzt von Microsoft als "Legacy-Technologie" bezeichnet. Es bedeutet nicht, dass es nicht funktioniert, aber es wird keine Updates erhalten. (Ähnlich wie WinForms im Vergleich zu WPF). WSE ist, soweit ich weiß, nicht mehr im Mainstream-Support. Aus diesen Gründen würde ich nicht empfehlen, ein neues Projekt auf WSE oder ASMX zu starten.


WCF ist allgemeiner als ASMX und kann aus diesem Grund komplizierter erscheinen.Aber wenn Sie einmal eine Auswahl getroffen haben und sich darauf festlegen, was Sie wollen (zum Beispiel wählen Sie HTTP und REST, oder wählen Sie Binär und TCP), ist es leistungsfähiger. WCF kann als Programmiermodell sowohl auf dem Client als auch auf dem Sender (in Ihrem Fall der Windows-Dienst) und/oder auf dem Server (dem Web-Service, der in der Web-App gehostet wird) verwendet werden.

Die Verwendung von WCF auf der Clientseite bedeutet nicht, dass Sie sie auf der Serverseite verwenden müssen und umgekehrt. Auf der anderen Seite, wenn Sie den Quellcode an beiden Enden kontrollieren, würde ich WCF auf beiden Seiten empfehlen.

Wie "wie die Regeln für die Web-App implementieren" - ich verstehe nicht, was Sie dort fragen. Vielleicht, wenn Sie bei der Frage dort genauer sind, wird jemand in der Lage sein zu helfen.

Update: Basierend auf Ihrer zusätzlichen Erklärung, werde ich vorschlagen, dass Sie die REST-Sachen in WCF für .NET 3.5 betrachten. In PHP ist es sehr einfach, einen REST-Stil-Dienst zu implementieren, und mit WCF gilt das Gleiche für .NET. Jetzt in Ihrem Fall ist der Windows-Dienst der Client und es sendet eine Anfrage, eine Update-Anforderung an verschiedene Server, die sich in den Netzwerken Ihrer Kunden befinden. Gemäß den REST-Prinzipien würde ich diese ausgehenden Anfragen abhängig von der Semantik des Anrufs PUTs oder POSTs machen.

Dann könnten Sie einige Beispiel-Service-Code an Ihre (Groß-) Clients senden, damit sie mit dem Aufbau beginnen, was sie benötigen, um Ihre ausgehenden PUT/POST-Nachrichten zu erhalten.

Sicherheit ist jedoch ein Anliegen. Du hast es überhaupt nicht erwähnt, was überraschend ist. Sicherheit gehört nicht zu den Dingen, die am besten zurückgestellt werden, so dass Sie sie später hinzufügen. Sie sollten früh darüber nachdenken - dies kann die von Ihnen getroffenen Protokolloptionen beeinflussen. Wenn Sie beispielsweise die Clients und Server gegenseitig authentifizieren müssen (letzteres in Ihrem "Großbuchstaben" -Clients-Netzwerk), sollten Sie vielleicht SOAP verwenden, was Ihnen auf der Protokollseite aus Sicherheitsgründen gute Optionen bietet. Sichere Web-Service-Erweiterungen (WS-Sec, usw.) werden in WCF zwar gut unterstützt, sind sich aber hinsichtlich des Status dieser Funktion in PHP nicht sicher.

+0

+1 für die Empfehlung von WCF über ASMX/WSE - wenn heute ein neues Projekt gestartet wird, ist es sinnlos, veraltete Technologien wie ASMX und WSE zu verwenden, wenn ein viel leistungsfähigerer und flexiblerer Nachfolger verfügbar ist! –

+0

Obwohl ich in meiner ursprünglichen Erklärung Sicherheit nicht erwähnt habe, wird dies definitiv erwogen, da die Informationen, die gesendet werden, empfindlich sind. Basierend auf Forschung und anderen Posts müssen wir eine Mindestanforderung festlegen, wie der zahlende Kunde seine Webdienste implementieren soll. Authentifizierung ist ein Muss. – mickyjtwin

+0

Ich stimme marc_s zu, nachdem ich von WSE zu WCF gewechselt habe, werde ich nie wieder zurückkehren. –