locked
IIS & WCF-Service RRS feed

  • Frage

  • Hallo,

    ich habe mit VS Community 2013 einen einfachen WCF-Dienst erstellen lassen, habe mit SvcUtil.exe 2 Dateien für den Client generieren lassen und diese dann in eine XBAP-WPF-Anwendung eingebaut.

    Das Debuggen des Dienstes unter Benutzung des WCF-Testclient-Tools funktioniert wunderbar. Ich sehe auch im Task-Manager, daß ein iisexpress.exe läuft.

    Jetzt würde ich aber gern meine XBAP-Anwendung auf den WCF-Dienst zugreifen lassen wollen. Dazu müßte ich die Dateien des Clients, die der Veröffentlichungsmechanismus erstellt hat, und die Dateien des Dienstes irgendwie in den IIS integrieren. Leider habe ich keine Idee, wie ich wo was tun muß. Geht das überhaupt mit dem IISExpress? Wenn ja, wie? Wenn nein, kann ich mir auf mein Win 8.1 (non-Pro) einen kostenlosen IIS bzw. einen Web-Server, der WCF versteht, herunterladen und installieren?

    Über Infos und Links würde ich mich freuen.

    Gruß
    Heiko

    Mittwoch, 27. Mai 2015 16:46

Antworten

  • Hi Heiko,
    schau mal in Deiner Win 8.1 Edition unter "Windows Feature aktivieren und deaktivieren" nach (unter Programme), ob sich da die Internetinformationsdienste aktivieren lassen. Wenn das funktioniert, dann kannst Du auch den WCF-Dienst hosten, am einfachsten gleich in der "Default Web Site" (unter wwwroot).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Heiko65456465 Donnerstag, 28. Mai 2015 15:21
    Mittwoch, 27. Mai 2015 18:53
  • Hi Heiko,
    der IIS reagiert auf die eingestellte Bindung (IP-Adresse und Port). Eine Anfrage (Request) wird an die Webanwendung weitergeleitet, die die zutreffende Bindung aufweist. Die Webanwendung nutzt die Dateien im virtuellen Pfad. Standardmäßig wird eine Webanwendung eingerichtet, die auf alle IP-Adressen und Port 80 reagiert und die Dateien in c:\inetpub\wwwroot nutzt. Du kannst einen anderen virtuellen Pfad konfigurieren und dort die erforderlichen Dateien ablegen. Du kannst auch eine weitere Webanwendung einrichten, die auf einen anderen Port reagiert.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Heiko65456465 Donnerstag, 18. Juni 2015 13:25
    Donnerstag, 28. Mai 2015 19:24

Alle Antworten

  • Hi Heiko,
    schau mal in Deiner Win 8.1 Edition unter "Windows Feature aktivieren und deaktivieren" nach (unter Programme), ob sich da die Internetinformationsdienste aktivieren lassen. Wenn das funktioniert, dann kannst Du auch den WCF-Dienst hosten, am einfachsten gleich in der "Default Web Site" (unter wwwroot).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Heiko65456465 Donnerstag, 28. Mai 2015 15:21
    Mittwoch, 27. Mai 2015 18:53
  • Hallo Peter,

    besten Dank für die Info. Ich habe die IIS-Dienste aktiviert und dann nachträglich bei WCF-Dienste noch HTTP-Aktivierung ausgewählt. Ich kann nun den WCF-Dienst aus der XBAP heraus verwenden.

    Nachdem ich eine HTML-Seite geändert habe, hat er dennoch die alte Version nach Strg+F5 im Browser geliefert, selbst dann, wenn ich im wwwroot die Datei gelöscht und mit neuem Timestamp erneut hineinkopiert habe. Ich weiß nicht, wo er die alte Version der Datei hergeholt hat. In der "Ausgabezwischenspeicherung" habe ich dann für .html eingestellt, dass er auf Dateiänderungen achten soll. Für * scheint das auch zu funktionieren, nicht aber für .*

    Gibt es eine Möglichkeit, das Verzeichnis C:\inetpub auf ein anderes Laufwerk zu verlagern? Ich habe für den IIS 7 eine Anleitung gefunden, mit der man an 10 verschiedenen Stellen (Scripten und Registry) Änderungen vornehmen soll. Das will ich mir aber nicht antun. Deshalb die Frage, ob es nun eventuell eine elegantere Lösung gibt. Wenn ich localhost in den Browser eingebe, möchte ich gern durch die Verzeichnisstruktur navigieren können. Das klappt bereits, hätte das aber gern auf einem anderen Laufwerk.

    Viele Grüße
    Heiko


    Donnerstag, 28. Mai 2015 15:08
  • Hi Heiko,
    der IIS reagiert auf die eingestellte Bindung (IP-Adresse und Port). Eine Anfrage (Request) wird an die Webanwendung weitergeleitet, die die zutreffende Bindung aufweist. Die Webanwendung nutzt die Dateien im virtuellen Pfad. Standardmäßig wird eine Webanwendung eingerichtet, die auf alle IP-Adressen und Port 80 reagiert und die Dateien in c:\inetpub\wwwroot nutzt. Du kannst einen anderen virtuellen Pfad konfigurieren und dort die erforderlichen Dateien ablegen. Du kannst auch eine weitere Webanwendung einrichten, die auf einen anderen Port reagiert.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Heiko65456465 Donnerstag, 18. Juni 2015 13:25
    Donnerstag, 28. Mai 2015 19:24
  • Hallo Peter,

    ich habe das inetpub nach D:\ kopiert und anschließend D:\inetpub\wwwroot als neue Site eingerichtet, die für Port 80 zuständig ist. Die Site C:\inetpub\wwwroot hört jetzt auf Port 8081. Wenn ich nun die Site auf D: starte, werden die Dateien auch von dort gezogen. Die log-Datei wird auch auf D: angelegt, allerdings werden die config- und tmp-Dateien weiterhin unter C:\inetpub erstellt.

    Die Uhrzeiten in der Log-Datei sind um -2 h verschoben.

    Auf das Verzeichnis D:\inetpub\wwwroot habe ich normalen Schreibuzugriff. Für die Site habe ich das HTTP-Verb PUT zugelassen (nur für Testzwecke). Ich erhalte jedoch eine WebException mit Fehler 405 (Unzulässige Methode). Hast du vielleicht noch ein paar gute Tipps?

    Viele Grüße
    Heiko

    Donnerstag, 28. Mai 2015 21:45
  • Hi Heiko,
    wichtig ist auch, dass die Webanwendung im ApplicationPool unter dem dort konfiguriertem Konto läuft. Dieses Konto muss auf den physischen Pfad auch ausreichende Rechte haben. Standardmäßig ist das IIS_IUSRS mit Lesen, Ausführen und Anzeigen, welches als ApplicationPoolIdentity (integriertes Konto) eingetragen ist. Das Konto kann in den erweiterten Einstellungen des Pools geändert werden.

    Das Verzeichnis für die Protokollierung steht standardmäßig auf
    "%SystemDrive%\inetpub\logs\LogFiles", auch bei einer neu angelegten Site.

    Wichtig ist auch, dass in der Site aufgeführten Ordner, in denen sich Anwendungen befinden, auch als Anwendungen konfiguriert sind. Die resultierende web.config ist die Überlagerung aller web.config's von der Anwendung bis zur Site.

    Auch die eingestellte Framework-Version muss passen (CLR-Version im ApplicationPool).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Freitag, 29. Mai 2015 05:58
  • Hallo Peter,

    ich habe einen neuen AnwendungsPool mit der neuen Site auf D: erstellt. Dem IIS_IUSRS habe ich auf die Verzeichnisse die gleichen Berechtigungen gegeben wie unter C:\inetpub.

    Ich habe einen Unterordner "write" erstellt, mit vollen Zugriffsrechten für IIS_USRS, dennoch kann ich aus dem Browser per HttpWebRequest nicht schreiben, nur lesen. Es kommt weiterhin Fehler 405, obwohl ich für das Verzeichnis PUT zulasse.

    Was meinst du mit "als Anwendungen konfiguriert" ? Den Inhalt der vom Visual Studio generierten Datei WCFService.dll.config habe ich in die web.config direkt im wwwroot eingepflegt. Hätte ich sie einfach nur ins bin-Verzeichnis kopieren (und zu web.config umbenennen) müssen?

    Wenn ich den WCF-Service aufrufe, kann ich normal auf das Dateisystem zugreifen. Allerdings ist das CurrentDirectory c:\windows\system32\inetsrv. Hat man innerhalb des WCF-Service eine API zur Verfügung, die einem allgemeine Sachen der Web-Session zur Verfügung stellt, z.B. das Root-Verzeichnis der aktuellen Site?

    Viele Grüße
    Heiko

    Freitag, 29. Mai 2015 14:24