Frage

Ich hatte einen WCF-Dienst mit der Rollenbasis-Authentifizierung und -berechtigung erstellt. Und die Implementierung jeder Operation ist wie

generasacodicetagpre.

Der Mitgliedschaftsanbieter und Rolemanager sind die für MySQL, nicht in GAC. Die SSL-Zertifikate werden von IIS 7 für HTTPS generiert.

und ich habe einige Integrationstests wie

generasacodicetagpre.

Eine Instanz läuft auf meiner Dev-Maschine von Win7, und der andere ist auf einem Testserver von Server 2012. Beide Instanzen des WCF-Dienstes waren gut funktioniert.

Nach 1 Monaten habe ich jedoch festgestellt, dass die Instanz auf dem Server 2012 nicht mehr funktioniert und bei der Authentifizierung mit der folgenden Meldung nicht mehr fehlgeschlagen ist.

update:

generasacodicetagpre.

update:

Ich habe das Folgende beobachtet und ausgeschlossene Ursachen ausgeschlossen.

    .
  1. Die Auth-Datenbanken an beiden Maschinen sind identisch, und ich könnte sehen, dass der WCF-Dienst SQL-Abfragen erstellt, um Mitgliederinformationen abzurufen, nachdem der Client eine Anfrage erstellt.
  2. Ich hatte die IIS-Bindung und -einstellungen sowie Web.Config auf beiden Maschinen verglichen, die im Wesentlichen identisch sind, außer einigen Adressen.
  3. Der Event Viewer zeigt keine Warnung über den WCF-Dienst.
  4. Die WCF-Service-Implementierung ist dadurch eingerichtet, dass dies zugeschrieben wurde: Public Class ErrorHandlerBehaviorattribute: Attribut, IVICEBehavior, IErrorHandler und alle nicht erfassten Ausnahmen gehen zu diesem Attribut, das die Fehler in einer Protokolldatei anmelden, die Protokolldatei jedoch nichts aufgenommen hat Diese Angelegenheit.
  5. und ich hatte die geladenen Baugruppen in beiden Fällen verglichen. In Windows 7 sind die Systemanordnungen grundsätzlich von Windows \ Microsoft.net \ Assembly \ Gacxxx \ xxx, jedoch in der Server 2012, einige Baugruppen stammen von Windows \ Assembly \ NativeImages_v4.0.30319_64, hier sind einige Baugruppen, die sich in den einzigartigen sind:

    generasacodicetagpre.

    Im Gegensatz dazu ist in Win 7 nur das System von den einzigartigen Simals. Ich bin nicht sicher, ob der Speicherort von Baugruppen oder nativen Bildern das Verhalten ändern kann.

    Die Dienste und Kunden werden mit VS 2012 auf .NET Framework 4.5 entwickelt.

    Was könnte möglicherweise die Instanz auf dem Server 2012 fehlschlagen?

War es hilfreich?

Lösung

Probleme aufgelöst.

Die Wurzel der Ursachen: Fehlende ASP .NET MVC-Baugruppen im Server 2012.

Der Hintergrund ist, ich möchte, dass der WCF-Dienst dieselbe Auth-Datenbank mit MVC-Anwendungen teilen, die in der Zukunft erstellt werden sollen. Der Mitgliedsanbieter- und Auth-Manager sind also diejenigen aus MVC, und die Datenbank ist MySQL, sodass die Anbieter von einer Open Source-3RD-Parteikomponente, die mit MVC gekoppelt ist.

Die Gründe, warum mein nicht erfasster Ausnahmehandler und der Event-Viewer keine Warnungen über fehlende Baugruppen fangen könnten: 1. Der Dev-PC wurde von einem früheren Entwickler verwendet, der GAC liebte. Sie wissen, dass GAC in einem Dev-PC mit viel Problemen führen kann. Die Tonnen von Montage von MVC 1,2 und 3 waren in GAC. 2. Die dritte Komponente, die mit MVC interagiert, hat einige schlechte Programmierpraxis, die irgendwo einige Ausnahmen von fehlenden Baugruppen schlucken.

Nachdem ich geladene Baugruppen nacheinander in beide Maschine verglichen habe, fand ich die WCF-Dienstinstanz auf dem Server 2012, hatte keine webmatrix.webdata.dll. Nachdem ich die Montage in das Bin-Verzeichnis des virtuellen Verzeichnisses kopiert hatte, erhielt ich eine Kette von Fehlermeldungen zu mehr fehlenden Anordnungen, nachdem ich fehlende Anordnungen kopiert habe, die eins nach einem gemeldet wurden. Diese Baugruppen gehören grundsätzlich zu MVC. Die Fehlermeldungen erschienen auf der Clientseite in der Antwort aus dem Dienst in HTML, sowie Event Viewer auf der Serverseite.

Ich sorge also sicher, dass die Bereitstellungsskripts jeweilige Baugruppen aufnehmen.

Anscheinend nach dem Dienst, nachdem der Service abgerufene Mitgliederinfo aus der Auth-Datenbank abgerufen wird, delegiert der Dienst die Info auf andere Anordnungen von MVC zur weiteren Verarbeitung, und irgendwie schluckt die dritte Komponente die Ausnahme von fehlenden Baugruppen. Und die anderen Teile der Authentifizierung haben ein falsches Signal und ergeben dann eine irreführende Warnmeldung über "Überprüfung der Sicherheit ...".

Die Lektion ist: 1. GAC nicht in der Dev-Maschine. Wenn Sie eine Dev-Maschine von jemandem geerbt haben, besser investieren, um irgendwann zu investieren, um einige von Xcopy private Versammlungen gewesen sollen. 2. Einige Komponenten von Drittanbietern haben möglicherweise eine schmutzige Praxis gegen defensive Programmierungen. In meinem Fall verschluckte die Komponente die Warnungen über fehlende Baugruppen. 3. Es ist billiger, geladene Anordnungen zu vergleichen, bevor Sie andere mögliche Ursachen untersuchen. Ich benutze den Prozess-Explorer, um geladene Baugruppen in W3wp.exe aufzulisten.

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