Frage

Ich habe einen Service zugänglich über http und net.pipe. Es wird in IIS 7 (Server 2008) gehostet. Ich kann für mehrere Kunden auf der gleichen Maschine verschiedene Instanzen dieses Dienstes werden Hosting und damit die HTTP-Setup mit virtuellen Host-Namen usw. Das ist alles gut funktioniert.

Ich dachte, ich für das Netz Named Pipe ähnlich tun würde Bindung - mit irgendeiner Form von Die "virtualhostname Kunden in der Adresse Named Pipe Basis, so dass ich deshalb für den Zugriff auf die verschiedenen Kundeninstanzen mit unterschiedlichen net.pipe Urnen (Ich weiß, die net.pipe Namen sind URN die nicht-URL, so dass sie im Wesentlichen willkürlich sein, aber Ich dachte, ich würde ein ähnliches Muster auf die HTTP-Adressen folgen).

Hier ist meine web.config

<service name="Administration" behaviorConfiguration="AdministrationBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="normalWsBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="normalNetNamedPipeBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://virtualhostname.com/service" />
        <add baseAddress="net.pipe://virtualhostname.com/administration/service" />
      </baseAddresses>
    </host>
</service>

Allerdings beim Zugriff auf die WSDL für den Service - die Basisadresse für die net.pipe scheint ignoriert von IIS werden. Ich erhalte stattdessen die realen Hostnamen der Maschine, und ein net.pipe Adresse URN, die vollständig von IIS formatiert worden zu sein scheint.

<wsdl:port name="NetNamedPipeBinding_IAdministration" binding="tns:NetNamedPipeBinding_IAdministration">
   <soap12:address location="net.pipe://realhostname/service/Administration.svc"/>
   <wsa10:EndpointReference>
       <wsa10:Address>net.pipe://realhostname.com/service/Administration.svc</wsa10:Address>
       <Identity>
          <Spn>host/realhostname.com</Spn>
       </Identity>
   </wsa10:EndpointReference>
</wsdl:port>

Ohne Kontrolle über die Art und Weise net.pipe Namen gebildet werden, werde ich nicht in der Lage zu unterscheiden zwischen den mehreren Kundendienstinstanzen auf der Maschine. Hat jemand eine Ahnung, wie die Netto-Named Pipe Bindung URN innerhalb der IIS-Umgebung gesteuert werden?

(Ich mache viel von eigenständigem net.pipe Hosting während der Prüfung (das heißt neues Servicehost ())   so dass ich weiß, dass meine net.pipe Bindungen außerhalb von IIS arbeiten, und die Steuerung erlauben   über die genaue Named Pipe URN verwendet)

Wenn die Namen nicht in IIS gesteuert werden kann - hat jemand Erfahrung mit Hosting und mehrere separate net.pipe Service-Instanzen auf demselben Zugriff Maschine?

War es hilfreich?

Lösung

Dies ist eine alte Frage, aber ich dachte, ich meine Antwort hinzufügen würde, da ich auch eine Antwort für diese benötigt werden (und vielleicht gibt es andere gibt, die es brauchen auch).

Die Basisadresse eines IIS-gehosteten WCF-Dienst von IIS gesteuert und nicht in web.config außer Kraft gesetzt werden kann. Stattdessen können Sie die Basisadressen steuern, indem die IIS-Bindungsinformationen für die Website zu aktualisieren Sie Ihren Dienst hosten in.

Die meisten der Dokumentation fand ich online schlägt mit * als Bindungskonfiguration für net.pipe. Aber wenn Sie stattdessen „virtualsite.com“ als Bindungskonfigurationswert, wobei die Basis-Adresse Ihres net.pipe Endpunkt wird „virtualsite.com“ statt den Maschinennamen.

Hier ist ein Beispiel unter Verwendung von appcmd eine Website in IIS mit dem richtigen net.pipe konfigurieren Bindung:

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='virtualhostname.com']

Eine Anmerkung über HostNameComparisonMode , aber keine Wirkung bei IIS hat gemäß MSDN :

  

Diese Werte haben keinen Einfluss, wenn sie innerhalb der Internet Information Services (IIS) oder Windows-Prozessaktivierungsdienst (WAS) Hosting-Umgebung verwendet. In diesen Fällen verwendet WCF was Hostnamen Vergleichsmodus durch die IIS-Website zur Verfügung gestellt wird, um den WCF-Hosting-Service.

Stattdessen müssen Sie den Mechanismus verwenden, die ich oben beschrieben. Ich dies herausgefunden, indem untersucht, wie Hostname funktioniert in HTTP für IIS verbindlich. Leider habe ich nicht in der Lage gewesen, eine offizielle Dokumentation für dieses IIS-basiertes Szenario zu finden, für andere WCF transportiert.

Andere Tipps

Es scheint, dass der Hostname Teil des URI ignoriert und durch die Bindung auf dem HostNameComparisonMode des Kanals basierte Implementierung ersetzt. Sie können versuchen, ändern Sie ihn auf „Exact“ über die Service-Konfiguration ...

http://msdn.microsoft.com /en-us/library/system.servicemodel.netnamedpipebinding.hostnamecomparisonmode.aspx

  

NetNamedPipeBinding.HostnameComparisonMode   Der HostNameComparisonMode Wert, der angibt, ob der Host-Name verwendet wird, um den Dienst zu erreichen, wenn die URI entsprechen. Der Standardwert ist Strong (), die die Hostnamen im Spiel ignoriert.

Sehen Sie die Konfigurationssyntax hier: http://msdn.microsoft.com/en-us/library/ms731291. aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top