0

SharePoint Foundation 2010 用の asp.net mvc アプリケーションを開発しています。asp.net アプリケーションは 1 台のコンピューターでホストされ、SharePoint Foundation 2010 は別のコンピューターでホストされています。SharePoint 環境の ISAPI フォルダー内に 1 つのカスタム wcf サービスを展開しました。このカスタム wcf サービスは、コンテンツ データベースをプログラムで作成します。asp.net アプリケーションは、このカスタム wcf サービスを使用します。私のシナリオはリンクに似ているため、このアプローチを使用しています - http://blog.sharedove.com/adisjugo/index.php/2012/07/31/creating-site-collections-in-specific-content-database/ . 上記のシナリオを実装すると、エラーが発生しました- http://social.technet.microsoft.com/Forums/en-US/sharepointdevelopmentprevious/thread/f10d009b-13c4-4942-86b4-2ab8c4f5994d。私はこのエラーを解決しましたhttp://beyondweblogs.com/sharepoint-2010-sppersistedobject-access-denied/ . 現在、エラーが発生しています - System.InvalidOperationException: Operation is not valid due to the current state of the object.

System.InvalidOperationException: Operation is not valid due to the current state of the object.
   at Microsoft.SharePoint.WebControls.SPControl.SPWebEnsureSPControl(HttpContext context)
   at Microsoft.SharePoint.Utilities.SPUtility.ValidateFormDigest()
   at Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate()
   at Microsoft.SharePoint.Administration.SPPersistedChildCollection`1.Add(T newObj, Boolean ensure)
   at Microsoft.SharePoint.Administration.SPPersistedChildCollection`1.Ensure(T newObj)
   at Microsoft.SharePoint.Administration.SPContentDatabaseCollection.Add(Guid newDatabaseId, String strDatabaseServer, String strDatabaseName, String strDatabaseUsername, String strDatabasePassword, Int32 warningSiteCount, Int32 maximumSiteCount, Int32 status, Boolean provision, Guid lockId, Int32 addFlags)
   at Microsoft.SharePoint.Administration.SPContentDatabaseCollection.Add(String strDatabaseServer, String strDatabaseName, String strDatabaseUsername, String strDatabasePassword, Int32 warningSiteCount, Int32 maximumSiteCount, Int32 status)
   at Niks.SP2010.SPHostedWCFService1.SPHostedWCFService.<createContentDb>b__7()
   at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()
   at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
   at Niks.SP2010.SPHostedWCFService1.SPHostedWCFService.createContentDb()
   at Niks.SP2010.SPHostedWCFService1.SPHostedWCFService.<>c__DisplayClass3.<GetName>b__1()
   at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()
   at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
   at Niks.SP2010.SPHostedWCFService1.SPHostedWCFService.GetName()

このエラーは、上記のリンク bolg.sharedove.com で説明されています。bolg.sharedove.com で説明されているように、次のコードを設定する必要があると思います

var storeContext = HttpContext.Current; 
HttpContext.Current = null; 
// do your code 
HttpContext.Current = storeContext;

上記のコードを wcf サービスに設定できないと思います。asp.netアプリケーションで設定しようとしましたが、同じエラーが発生しました。このコードをどこに設定すればよいか教えてください。誰かが別の解決策を持っている場合は、共有してください。

4

1 に答える 1

0

wcf サービス アプリケーションに System.Web.dll への参照を追加しただけです。これで、wcf で HttpContext を使用できるようになりました。私はwcfで次のコードを設定しました

var storeContext = HttpContext.Current; 
HttpContext.Current = null; 
// do your code 
HttpContext.Current = storeContext;

これで、wcf のすべてのコードが正常に機能します。コンテンツ データベースとサイト コレクションをプログラムで作成できるようになりました。

于 2013-05-08T03:17:50.670 に答える