Konfigurieren von mehreren WCF-binding-Konfigurationen für ein einzelnes Schema

Habe ich eine Reihe von IIS7-net gehostet.tcp WCF-Dienste, die dazu dienen, meine ASP.NET MVC-web-Anwendung. Die web-Anwendung zugänglich über das internet.

WCF Services (IIS7) <--> ASP.NET MVC Application <--> Client Browser

Dienstleistungen sind Benutzername authentifiziert ist, die berücksichtigen, dass ein client (von meiner web-Anwendung) verwendet, um die Anmeldung endet der aktuelle AUFTRAGGEBER, die auf dem host.

Ich will einer der Dienste authentifiziert werden, anders, denn es dient der view-model für meine Anmeldung anzeigen. Wenn es heißt, der client ist offensichtlich nicht angemeldet noch. Ich vermute, die Windows-Authentifizierung dient am besten-oder vielleicht nur-Zertifikat-basierte Sicherheit (die in der Tat sollte ich verwenden für den authentifizierten Dienste wie auch), wenn die Dienste gehostet werden, auf einen Computer, der nicht in der gleichen domain wie die web-Anwendung.

Das ist nicht der Punkt hier, obwohl. Die Verwendung von mehreren TCP-Bindungen ist was, gebe mir Mühe. Ich habe versucht, es so in meinem client-Konfiguration:

<bindings>
  <netTcpBinding>
    <binding>
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
    <binding name="public">
      <security mode="Transport">
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>

<client>
  <endpoint contract="Server.IService1" binding="netTcpBinding" address="net.tcp://localhost:8081/Service1.svc"/>
  <endpoint contract="Server.IService2" binding="netTcpBinding" bindingConfiguration="public" address="net.tcp://localhost:8081/Service2.svc"/>
</client>

Server-Konfiguration ist diese:

<bindings>
  <netTcpBinding>
    <binding portSharingEnabled="true">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
    <binding name="public">
      <security mode="Transport">
        <message clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>

<services>
  <service name="Service1">
    <endpoint contract="Server.IService1, Library" binding="netTcpBinding" address=""/>
  </service>
  <service name="Service2">
    <endpoint contract="Server.IService2, Library" binding="netTcpBinding" bindingConfiguration="public" address=""/>
  </service>
</services>

<serviceHostingEnvironment>
  <serviceActivations>
    <add relativeAddress="Service1.svc" service="Server.Service1"/>
    <add relativeAddress="Service2.svc" service="Server.Service2"/>
  </serviceActivations>
</serviceHostingEnvironment>

Die Sache ist, dass beide Bindungen nicht zu wollen scheinen, Leben zusammen in mein Gastgeber. Wenn ich entfernen, entweder von Ihnen, ist alles in Ordnung, aber zusammen erzeugen Sie die folgende Ausnahme an den client:

Die angeforderte Aktualisierung nicht unterstützt, die von 'net.tcp://localhost:8081/Service2.svc'. Dies könnte aufgrund von nicht übereinstimmenden Bindungen (beispielsweise aktivierter Sicherheit auf dem client und nicht auf dem server).

In der server-trace-log finde ich folgende exception:

Protokoll-Typ application/verhandeln gesendet wurde, ein Dienst, der nicht unterstützen, die Art von upgrade.

Bin ich auf der Suche in die richtige Richtung oder gibt es eine bessere Möglichkeit, dies zu lösen?

UPDATE

Obwohl diese Frage scheint zu sein, ziemlich alt, es ist immer noch relevant für mich (und ich denke andere auch). Derzeit bin ich mit einem magischen Benutzername/Passwort-Kombination (weil der aktuelle Prinzipal braucht einen username) beim Zugriff auf Dienste, die nicht authentifiziert werden in den ersten Platz. Im Licht dieser Frage, sehen Sie, dass ich hätte lieber eine nicht authentifizierte Bindung, die speziell für diese öffentlichen Dienste. In diesem Fall, eine Magische Konto ist nicht unsicher, es bietet keine Zugriff auf die anderen als auf der öffentlichen Ebene.

Schreibe einen Kommentar