在哪里存储SPItemEventReceivers的全局设置

本文关键字:全局设置 SPItemEventReceivers 存储 在哪里 | 更新日期: 2023-09-27 17:57:49

我有一个SPItemEventReceiver,它只会使用POST请求通知给定IP和端口上的另一个HTTP服务器有关事件。

HTTP服务器与sharepoint在同一台计算机上运行,所以我过去常常在localhost和一个固定的端口号上发送通知。但是,由于事件接收器可以在服务器场中的其他服务器中调用,那么localhost:PORT将不可用。

因此,每次我的HTTP服务器启动时,它都需要将其IP地址和端口保存在SharePoint中所有EventReceiver都可以访问的某个位置,无论它们在哪台服务器上被调用。

什么地方是存储此类全球可用信息的好地方?

我对SPWebService.ContentService.Properties很强硬,但我真的不确定这是否是个好主意。你觉得怎么样?

在哪里存储SPItemEventReceivers的全局设置

如果您使用的是Sharepoint 2010,我会考虑将这些值存储在属性包中。使用客户端对象模型,甚至Javascript/ECMAScript客户端对象模型。这些代码可能对你有帮助。

using (var context = new ClientContext("http://localhost"))
{
  var allProperties = context.Web.AllProperties;
  allProperties["testing"] = "Hello there";
  context.Web.Update();
  context.ExecuteQuery();
}

或者使用javascript:

    function getWebProperty() {
        var ctx = new SP.ClientContext.get_current();
        var web = ctx.get_site().get_rootweb();
        this.props =  web.get_allProperties();
        this.props.set_item(“aProperty”, “aValue”);
        ctx.load(web);
        ctx.executeQueryAsync(Function.createDelegate(this, gotProperty), Function.createDelegate(this, failedGettingProperty));
    }
    function gotProperty() {
        alert(this.props.get_item(“aProperty”));
    }
    function failedGettingProperty() {
        alert("failed");
    }

来源:https://sharepoint.stackexchange.com/questions/49299/sharepoint-2010-net-client-object-model-add-item-to-web-property-bag

https://www.nothingbutsharepoint.com/sites/devwiki/articles/Pages/Making-use-of-the-Property-Bag-in-the-ECMAScript-Client-Object-Model.aspx

实际上有几种方法可以在SharePoint中保存配置值:

  • SharePoint对象的属性包SPWebApplication, SPFarm, SPSite、SPWeb、SPList、SPListItem`
  • SharePoint中的"配置"列表-只是您可以设置为Hidden = TRUE的常规列表
  • web.config文件,特别是<AppSettings>

Wictor Wilen实际上解释了在SharePoint中存储设置的6种方法。

当您谈到一个外部进程试图将其设置保存在某个位置时,通常我会推荐使用web.config,但web.config中的每一次更改都会导致IISRESET,使其不是一个好的选项。我强烈建议在你最喜欢的网站上使用属性包(例如SPWebApplication.Properties包)或隐藏列表。你可以这样设置财产袋:

SPWebApplication webApplication = ...
object customObject = ...
// set value in hashtable
webApp.Add("MySetting", customObject);
// persist the hashtable
webApp.Update();

看看这有什么酷的?实际上,您可以将对象存储在web应用程序中,只要您保持对象的可序列化性,该应用程序就可以包含多个设置。