質問

私はSharePointでWCFサービスを作成および展開しており、jQueryを使用して要求を送信しています。サブサイトを除いてすべてがうまく機能しています。

これら2つのサービスURLを持っているとしましょう:

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

これら2つのURLを使用すると、SPContext.Current.Siteは同じで正しいです。
しかし、SPContext.Current.Webは正しくないのです。2番目のURLの使用SPWebオブジェクトは、ルートWebではなくサブWebである必要があります。

サブサイトをSPWebオブジェクトとして取得する方法は?Web URLをWCFメソッドにパラメータとして常に渡す必要がありますか?

役に立ちましたか?

解決

検索後、SPContext.Current.Webは常にRootWebを返すので、特定のサブWebのURLが必要です。

SPWEBオブジェクトが必要なすべてのWCFメソッドにSPWEB URLを渡すことを避けるために、次のことができます。

ASP.NETのComatibilityモードでWCFサービスを実行しています。このプロパティは、ドメイン名の後にURL文字列内のすべてのものを返します。次に、サブWeb相対URLを取得し、それをHttpContextメソッドに渡すためにこの文字列を切り捨てることができます。

例:

クライアント側でjQuery Ajax呼び出しのURL引数は次のとおりです。

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

サーバー側でHttpContext.Current.Request.RawUrlを使用している場合は、

/subsite/_vti_bin...../MethodName
.

その後、この文字列を切り捨てた後、OpenWeb()HttpContext.Current.Request.RawUrlメソッドに渡します。

他のアイデアは大いに感謝されています。

他のヒント

私は同じケースを持っていました。しかし、私はここからURLを取りました:

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

だから私はSPSiteオブジェクトを作成することができました:

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
.

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top