の作成と管理の経路を通じSharePointオブジェクトモデル
-
20-08-2019 - |
質問
この問題のためのプがグルなのです。
このシナリオ:私はASP.Net webサービスをリンク当社は企業のCRMシステムWSSに基づくイントラネットです。私としては提供の新しいケイコンを新しいクライアントが追加されCRMシステム。するためにこの作品ながらプレーする必要がありますプログラムの追加の管理パスに新しいサイトです。知っていることが可能で、オブジェクトモデルにしてしまっているんですけどいので自分のwebサービスで失敗します。サンプルコードを抽出。
Dim _ClientSiteUrl As String = "http://myintranet/clients/sampleclient"
Using _RootWeb As SPSite = New SPSite("http://myintranet")
Dim _ManagedPaths As SPPrefixCollection = _RootWeb.WebApplication.Prefixes
If Not (_ManagedPaths.Contains(_ClientSiteUrl)) Then
_ManagedPaths.Add(_ClientSiteUrl, SPPrefixType.ExplicitInclusion)
End If
End Using
このコードに失敗したとNullReferenceExceptionにSPUtility.ValidateFormDigest().研究とこれにより権限が不十分なたのコード内の高架特権ブロックを使用してSPSecurity.RunWithElevatedPrivileges(AddressOf AddManagedPath、AddManagedPathをはじめ、手順を含む上記のコードサンプルです。
これに失敗したとInvalidOperationException,"操作は無効でに現在のオブジェクトです。"
明日へ向かって走れは間違いだったのか?
一回避策しているコー STSADM.EXE 介します。Start()の提供に必要なパラメータを、この作品。
更新: アの開発、webサービス、走行するVisual Studio2005年のwebサーバかのセキュリティコンテキストまで走るのでしょうか?変更したいのでセキュリティコンテキストを作ります。config?
更新: と思うので問題はないと実行していないwebサービスの正しいドセキュリティコンテキスト.したいと思っていたのを回避策をつくろうと言ったのは、シェルにSTSADMが、このアプリケーションプールティのwebサービスの運転下での会員登録が必要となるSharePointます。
解決
更新 やろうと思い立ったら、そのときこの問題はます。
SPSecurity.RunWithElevatedPrivileges:通常のコード、SharePoint webアプリを実行し、権限のユーザーの行動です。のRunWithElevatedPrivilegesのコードのコンテキストSharePoint web応用プールアカウント(いと思い) の説明 MSDN が、詳しくは小さなビットです。
問題は、携帯電話で使用されるコンテンツの追加では、サイトのサービスは実際に走行のコード、SharePointのような過程をたどってき説明するのはなぜできな上昇(思サービス"といいます。)
していき裂を変更するユーザのウェブサービスアプリケーションプールの場合と他の喜びです。
そうすると、権限の問題です。もう:
Dim clientSiteUrl As String = "http://myintranet/clients/sampleclient"
Using SPSite = new SPSite(clientSiteUrl)
webApp As SPWebApplication = SPWebApplication.Lookup(new Uri(clientSiteUrl));
If Not (webApp.Prefixes.Contains(clientSiteUrl)) Then
webApp.Prefixes.Add(clientSiteUrl, SPPrefixType.ExplicitInclusion)
End If
End Using
これは正確なコードです。
他のヒント
以降、上記のコードではありませんし、正確なコードはこちらを正確にコードのためのウェブアプリケーションscopped機能の特徴を活性化イベント:
テクスチャの再構成に関する活性化のMange webアプリの特徴のページ活性化機能を新たに明示的に管理パスに指定されたwebアプリケーション(I交換したいのハードコーディングも。特徴です。親違いによるものなのか、それとも似ています。)
using (SPSite site = new SPSite("http://dev-moss07-eric/PathHere")) {
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://dev-moss07-eric"));
if (webApp.Prefixes.Contains("PathHere"))
{
//
}
else
{
webApp.Prefixes.Add("PathHere", SPPrefixType.ExplicitInclusion);
}
}
コードだけでなく、改善が私の試みで変換した上記のコードです。
を処理しなければいけない、管理パス明し、サイトコレクションで、次の操作を行います:
using (SPSite site = new SPSite("http://dev-moss07-eric")) {
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://dev-moss07-eric"));
if (webApp.Prefixes.Contains("ManagedPathHere"))
{
//
}
else
{
webApp.Prefixes.Add("ManagedPathHere", SPPrefixType.ExplicitInclusion);
}
using (SPWeb web = site.OpenWeb())
{
SPWebApplication webApplication = web.Site.WebApplication;
try
{
webApplication.Sites.Add("ManagedPathHere","Site Title Here","This site is used for hosting styling assets.", 1033, "STS#1", "6scdev\\eric.schrader", "Eric Schrader", "eric.schrader@6sc.com");
}
catch (Exception ex)
{
//ex.ToString;
}
}
}