Soll spcontext.current im benutzerdefinierten WCF -Dienst null sein?
-
22-10-2019 - |
Frage
Hier ist das Szenario:
- Benutzerdefinierte WCF -Dienst, der in SharePoint 2010 bereitgestellt wird
- Die Site verwendet Angabenbasis -Authentifizierung (FBA, NTLM)
- .SVC wird im Bienenstock in ISAPI eingesetzt
- Der Dienst wird über die benutzerdefinierte Dienstfabrik konfiguriert
- Der Dienst wird mit Ajax aus dem Browser aufgerufen
- Ich kann den Service gut erreichen. Der Service ist abgelaufen und akzeptiert Anfragen
Hier ist das Problem: spcontext.current ist stets Null. Ich weiß sollte Die SPContext.current ist in benutzerdefinierten WCF -Diensten null Bei Verwendung von Ansprüchenbasis -Authentifizierung? Oder habe ich irgendwo einen Schritt verpasst?
Ich bin nie auf dieses Problem mit der klassischen Modus -Authentifizierung gestoßen, daher frage ich mich, ob dies nur etwas Besonderes für WCF+SharePoint+-Anleitungen ist und ob es mögliche Problemumgehungen gibt.
Danke für irgendeine Einsicht!
- Chuck
Lösung
Arrrrrgh! Schließlich fand es heraus, nachdem er für einen guten Tag damit gespielt hatte.
Ich möchte dies hier hier lassen, falls jemand anderes auf dasselbe Problem stößt.
Wenn ich den JavaScript -Endpunkt registriere, verwende ich die vollständige URL des Dienstes.
Also, wenn die Wurzel meiner Website bei:
http://mydomain.com/sites/site1
Ich registriere es bei:
http://mydomain.com/sites/site1/_vti_bin/myservicedir/myservice.svc/js
Das ist alles gut und in Ordnung. Wenn die Anfrage zum Abrufen der JavaScript -Stubs gestellt wird, kann ich in Fiddler sehen, dass die Anfrage geht:
/sites/site1/_vti_bin/myservicedir/myservice.svc/js
Ich bemerkte jedoch erst jetzt (schließlich, nachdem ich es stundenlang anstarrte .........
/_vti_bin/myservicedir/myservice.svc/MethodName
So mein SPContext
ist immer null
Da in der URL kein Site -Kontext angegeben ist.
Als ich mir die JavaScript -Stubs von SharePoint betrachtete, konnte ich sehen, dass der Anruf an set_path()
benutzte die gehackte URL. Einfach genug, um zu beheben, indem Sie anrufen set_path()
Wieder mit dem richtigen Weg.