Freitag, 17. August 2012

Windows Communication Foundation - Monster!!!

Ich versuche seit Stunden, einen bestehenden asmx Web Service meines Arbeitgebers gleichzeitig als WCF Service im IIS hosten zu lassen. Dabei will ich zunächst ein WsHttpBinding anbieten, und später ein NetTcpBinding.
Aber dieses Problem entpuppt sich als extrem komplex, was mich verwundert, denn die Aufgabenstellung ist kinderleicht. Mittlerweile kann ich WCF einfach nicht mehr hören. Microsoft prahlt unentwegt damit, wie toll diese Technik sein soll, ich aber sage euch: BULLSHIT! Im 21. Jahrhundert komplizierte XML Konfigurationen von Hand nehmen? Dokumentation - Fehlanzeige? Fehlerdiagnose = Eventlog? Fehlermeldungen, die überhaupt keine Anhaltspunkte liefern, was man falsch macht? Keine grafische Unterstützung durch Visual Studio oder IIS? Echt zum Kotzen das alles, aber leider alternativlos.
Also, hier die Chronik meines Leidens:
  1. Der asmx Web Service und seine Methoden müssen mit WCF Attributen versehen werden, wie Kenny Wolf beschreibt - bitte ignoriert aber seine web.config.
  2. Nun fügt man dem ASP.NET Projekt mit dem asmx Web Service einen WCF Service hinzu (.svc-Datei). Das kann man mit Visual Studio machen, dann werden schon einige tolle Eintragungen in die web.config getätigt. Die svc-Datei muss man bearbeiten und als neue Code-Behind-Datei die bestehende asmx.cs-Datei eintragen. Die alte Code-Behind-Datei kann man wegwerfen.
  3. Nun muss man in der MSDN nachlesen, wie man den Service konfiguriert. Schließlich zwingt WCF uns zum Verfassen von XML Konfigurationsdaten in epischem Ausmaß. Von Hand, versteht sich.
  4. Danach geht's immernoch nicht, weil WCF bei mir noch gar nicht im IIS registriert ist. (What the f*ck...) Also ServiceModelReg aufrufen.
  5. Danach geht's immernoch nicht, weil IIS noch nicht verkraftet, dass mein WCF Service erstmal nur ein WsHttpBinding mitbringt. Also schnell bei StackOverflow nach der Lösung dafür suchen: Vorübergehend schalte ich Net.Tcp ab. Auf .NET 4 will ich nicht aktualisieren, also muss ich wieder einen Sermon in die XML Konfiguration aufnehmen, etwa so:
        <serviceHostingEnvironment>
          <baseAddressPrefixFilters>
            <add prefix="net.tcp://localhost"/>
          </baseAddressPrefixFilters>
        </serviceHostingEnvironment>
Danach kriege ich immerhin den WsHttpBinding-Teil in den IIS und irgendwie laufen die meisten einfachen Sachen sogar.
Ab das Binding für NetTCP habe ich ja noch gar nicht in die web.config geschrieben. Ich ahne, dass hier noch unangenehme Arbeit auf mich wartet. Und vor allem viel handgeschriebener XML Konfigurationscode.
Das Problem: Es ist fast unmöglich, Informationen darüber zu finden, wie das NetTcpBinding im IIS aufgesetzt werden muss.
  1. Unbedingt nachvollziehen sollte man die Schritte aus einem Schweizer MSDN Blog.
  2. Und nicht vergessen: Den Workaround aus Schritt 5 (oben) wieder entfernen, sonst geht's nämlich wieder nicht und man sucht stundenlang, weil es keine richtige Fehlermeldung gibt.
Danach habe ich mein Ziel erreicht:
Ich habe meinen bestehenden asmx Web Service als WCF Service im IIS mit zwei Endpunkten (WsHttpBinding und NetTcpBinding) veröffentlicht.

Aber an der Stelle hört das Drama leider noch nicht auf. Da mein asmx Web Service rege auf die Session-Variable zugreift (zu meiner großen Freude!), werde ich noch etliche Anpassungen vornehmen müssen, denn in WCF macht man das anders.

Mir stehen also noch spannende Ereignisse bevor...

Keine Kommentare:

Kommentar veröffentlichen