Frage

Ich habe einen WCF-Dienst in SharePoint erstellt und bereitgestellt und sende Anfragen mit JQuery.Bis auf die Unterseiten funktioniert alles einwandfrei.

Nehmen wir an, ich habe diese beiden Dienst-URLs:

 - http://localhost:1111/_vti_bin...../MethodName
 - http://localhost:1111/subsite/_vti_bin...../MethodName  

Wenn ich diese beiden URLs verwende, wird die SPContext.Current.Site ist das Gleiche und richtig.
Aber die SPContext.Current.Web ist das Gleiche, was falsch ist.Mit der zweiten URL the SPWeb Das Objekt muss das Unterweb und nicht das Stammweb sein.

Wie kann ich die Unterseite als SPWeb Objekt?Muss ich die Web-URL immer als Parameter an die WCF-Methode übergeben?

War es hilfreich?

Lösung

Nach der Suche bin ich zu dem Schluss gekommen, dass die SPContext.Current.Web Werde das immer zurückgeben RootWeb Daher benötige ich die URL des jeweiligen Sub-Webs.

Um zu vermeiden, dass die SPWeb-URL an jede WCF-Methode übergeben wird, bei der ich ein SPWeb-Objekt benötige, kann ich Folgendes tun:

Ich führe meinen WCF-Dienst im ASP.NET-Kompatibilitätsmodus aus, damit ich den verwenden kann HttpContext Objekt, und ich kann verwenden HttpContext.Current.Request.RawUrl.Diese Eigenschaft gibt alles in der URL-Zeichenfolge nach dem Domänennamen zurück.Dann kann ich diese Zeichenfolge abschneiden, um die relative Sub-Web-URL zu erhalten und sie an die zu übergeben OpenWeb() Methode.

Beispiel:

Auf der Clientseite lautet das URL-Argument des JQuery-AJAX-Aufrufs:

 http://localhost:1111/subsite/_vti_bin...../MethodName

Auf der Serverseite, wenn ich es verwende HttpContext.Current.Request.RawUrl Ich bekomme:

/subsite/_vti_bin...../MethodName

Nachdem ich diese Zeichenfolge abgeschnitten habe, übergebe ich die /subsite zum OpenWeb() Methode.

Alle anderen Ideen werden sehr geschätzt.

Andere Tipps

Ich hatte den gleichen Fall.Aber ich habe die URL von hier übernommen:

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;

So konnte ich ein SPSite-Objekt erstellen:

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top