0

我有一个 SPItemEventReceiver,它除了使用 POST 请求通知给定 IP 和端口上的另一个 HTTP 服务器关于事件之外什么都不做。

HTTP 服务器与 sharepoint 在同一台计算机上运行,​​因此我过去常常在 localhost 和固定端口号上发送通知。但是由于可以在 serverfarm 中的其他服务器中调用 eventreceiver,因此 localhost:PORT 将不可用。

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

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

我坚持了下来SPWebService.ContentService.Properties,但我不确定这是否是个好主意。你怎么看?

4

2 回答 2

3

好吧,如果您使用的是 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

于 2013-02-05T12:56:34.030 回答
2

实际上有几种方法可以在 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 应用程序中存储一个对象,该对象可以包含多个设置,只要您保持对象可序列化。

于 2013-02-05T16:41:43.437 回答