Warum, wenn ich Identität innerhalb eines WCF-Diensts, kann meinen Dienst nicht laden-System.Transaktionen wenn ich versuche, führen Sie eine LINQ to SQL-Abfrage?
Habe ich einen WCF-Dienst in IIS 7.0 gehostet, die laufen muss-Datenbank Abfragen. Um die Rechte dafür bin ich die Identität innerhalb des service wie folgt:
- Code
[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public void MyOperation(int arg)
Konfiguration
<behavior name="ReceivingServiceBehavior">
<!-- Other behaviors -->
<serviceAuthorization impersonateCallerForAllOperations="true" />
</behavior>
Wenn ich versuche zu verbinden, und führen Sie meine Abfrage bekomme ich die folgende:
Ausnahme - System.IO.FileLoadException: Konnte nicht geladen, Datei oder die assembly " System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' oder eine Ihrer Abhängigkeiten. Entweder ein geforderte Identitätswechselebene nicht zur Verfügung gestellt wurde, oder die mitgelieferten Identitätswechselebene ist ungültig. (Ausnahme von HRESULT: 0x80070542) Dateiname: 'System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' ---> System.- Laufzeit.InteropServices.COMException (0x80070542): Entweder eine geforderte Identitätswechselebene nicht zur Verfügung gestellt wurde, oder sofern die Identitätswechselebene ist ungültig. (Ausnahme von HRESULT: 0x80070542) System.Daten.Linq -.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser Benutzer) System.Daten.Linq -.SqlClient.SqlProvider.get_IsSqlCe() System.Daten.Linq -.SqlClient.SqlProvider.InitializeProviderMode() System.Daten.Linq -.SqlClient.SqlProvider.System.Daten.Linq -.Anbieter.IProvider.Execute(Expression query) System.Daten.Linq -.DataQuery`1.System.Sammlungen.Generisches.IEnumerable.GetEnumerator() System.Linq -.Buffer`1..ctor(IEnumerable`1 source) System.Linq -.Enumerable.ToArray[TSource](IEnumerable`1 source) auf den Vierten Platz.GHS.MessageRelay.RegistrationDBStorage.FindRegistration(SystemKey-Taste)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, die SQL-Abfragen ausgeführt werden, wie die imitierte Identität, die Sie tatsächlich benötigen, um die delegation zu Ihrem SQL server. Lesen Sie diesen Artikel für weitere Informationen:
http://msdn.microsoft.com/en-us/library/ms730088.aspx
Macht Ihre WCF-client legen Sie die erforderlichen "erlaubt Identitätswechselebene":
Standardmäßig ist Identifikation wenn nichts explizit angegeben ist. Check-out in diesem blog-post für mehr info.
danke Euch Jungs,
Ich löste es durch das Lesen der XML unter der Erklärung:
klappte es nur wenn ich die XML direkt aus dem WCFService Klasse.
Hmmm... ich weiß nicht. Allerdings könnten Sie zwingen, die dll zu laden früh auf. Da Sie IIS verwenden, diese würden vermutlich in Ihren globalen.asax - so etwas wie das erstellen und wegwerfen, eine TransactionScope-sollte die Arbeit tun...
Gespielt zu haben, um mit diesem einige mehr, die einfachste Lösung für IIS gehostete Dienste, um Ihre Anwendung auszuführen-Pool mit der Identität eines domain-Benutzer mit den erforderlichen Berechtigungen. Es gibt wohl Probleme mit diesem in Bezug auf Sicherheit, aber für unsere Zwecke ist es gut genug. Wir beschränken die Berechtigungen, die dieser Benutzer aber alles funktioniert, ohne sich in Kerberos, Identitätswechsel, delegation und die Geheimnisse der AD.
Danke huseyint. Ich habe gekämpft für die Vergangenheit Tag und eine Hälfte. Hier einige Sachen, die würde gespeichert haben mir eine Menge Zeit. Also wird es hoffentlich sparen, jemand anders einige Zeit.
Ich hatte Probleme mit der SQLConnection-und Identitätswechsel werfen einen registry-Zugriff verweigert bei der Transportsicherheit. Ich versuchte sogar mit transportwithmessagecredential. Innerhalb von procmon war ich immer "Bad Impersonation".
Meine config ist
IIS 7, virtuellen dir nur die windows-Authentifizierung aktiviert und deaktiviert habe, die Kernelmodus-Authentifizierung. Grundlegende Einstellungen, die ich eingestellt habe, es zu verwenden-pass-through-Authentifizierung.
Service Config -
und der client
Dieser eine ist mein problem gelöst.
Rechten Maustaste auf Visual studio (welche version Sie verwenden)
Eigenschaften
Wählen Sie die Registerkarte Kompatibilität
Füllen Sie die checkbox die sagt "Programm als administrator Ausführen"
Öffnen Sie das Projekt, aus dem der Speicherort der Datei
Führen Sie die Anwendung