这是WSS / SharePoint专家的问题。

请考虑以下情形:我有一个ASP.Net Web服务,它将我们的企业CRM系统和基于WSS的Intranet链接在一起。我想做的是,每当将新客户端添加到CRM系统时,就提供一个新的WSS网站集。为了使此工作有效,我需要以编程方式将托管路径添加到新网站集中。我知道可以通过对象模型来实现,但是当我在自己的Web服务中尝试时,它失败了。示例代码摘录如下: 通用标签

此代码失败,并在SPUtility.ValidateFormDigest()上出现NullReferenceException。研究表明,这可能是由于特权不足所致,我尝试使用SPSecurity.RunWithElevatedPrivileges(AddressOf AddManagedPath)在提升特权的块中运行代码,其中AddManagedPath是包含上述代码示例的Sub过程。

然后这失败,并显示InvalidOperationException,“由于对象的当前状态,该操作无效。”

我要去哪里错了?

我设法做的一种解决方法是通过Process.Start()调出STSADM.EXE,并提供必需的参数,然后它起作用。

更新:在开发Web服务时,我正在使用内置的Visual Studio 2005 Web服务器运行该服务-该服务将在什么安全上下文下运行?是否可以通过将条目放在web.config中来更改安全上下文?

更新:我认为问题肯定与没有在正确的SharePoint安全上下文中运行Web服务有关。我决定采用我建议的解决方法,并使用STSADM,尽管这样做,Web服务运行所在的应用程序池标识必须是SharePoint管理员的成员。

有帮助吗?

解决方案

更新 我认为您已经证明问题不在于代码。

SPSecurity.RunWithElevatedPrivileges:通常,SharePoint Web应用程序中的代码以执行操作的用户特权执行。RunWithElevatedPrivileges在SharePoint Web应用程序池帐户的上下文中运行代码(我认为) 关于 MSDN 的描述可以详细一点。

该调用的问题可能是该Web服务实际上并未在SharePoint流程中运行该代码,因此请解释为什么它无法提升(野生猜测警报)。

在更改Web服务应用程序池的用户方面遇到了麻烦,看看是否能带来任何乐趣。


可能是权限问题。 也许尝试: 通用标签

这不是确切的代码。

其他提示

由于上面的代码不是确切的代码,因此以下是Feature Activated事件中Web应用程序作用域功能的确切工作代码:

在Mange Web应用程序功能页面上的功能激活时,激活功能将在指定的Web应用程序中创建一个新的Explicit托管路径(我想替换硬编码,也许用Properties.Feature.Parent或类似的东西代替。) 通用标签

代码可能可以改进,但是我尝试转换上面的代码。

如果要创建托管路径(显式)并在该路径下创建网站集,请执行以下操作: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top