0

我创建了一个在项目更新时触发的 SharePoint 事件接​​收器。接收方需要访问 AfterProperties 和 ListItem。

当使用 IP 地址 ( http://10.0.4.50/sites/ ) 从 SharePoint Web 应用程序触发事件接收器时,它会在访问 SPItemEventProperties 中的 SiteId 和 WebUrl 时 引发FileNotFoundException 。找不到位于http://10.0.4.50/sites/companyName的 Web 应用程序。验证您是否正确键入了 URL。

使用主机名触发事件接收器时,在站点集合http://computerhostname/sites/companyName的设置中指定。这工作正常,不会抛出异常。

//Combine Both AfterProperties And ListItem
var ListProperties = new List<KeyValuePair<string, object>>();
ListProperties.AddRange(properties.AfterProperties.ToKeyValue());
ListProperties.AddRange(properties.ListItem.ToKeyValue(p => !p.Sealed));
var AvaliableProperties = ListProperties.Distinct(new KeyValueComparer<object>());
4

2 回答 2

1

这不一定是 SharePoint 问题,但很可能归结为主机上配置 IIS 的方式。特定站点可以“绑定”到 IP 地址和主机名,如果主机名不在浏览器发送的 HTTP GET 中,则 IIS 将返回一个404 NOT FOUND.

您可以通过使用浏览器来验证这一点,以查看您是否可以通过 IP 地址访问该站点。

如有必要,您可以添加其他绑定,但每个 IP 地址只能有一个“默认”绑定,因此(在您的情况下)10.0.4.50 只能存在一个站点。

解决存在多个站点但您不能使用主机名的情况的一种可能方法可能是为该 IP 添加到端口 80 以外的端口的绑定,因此您的 URL 将变为http://10.0.4.50:8080/sites/companyName.

于 2010-01-02T07:04:01.257 回答
1

这不仅是 IIS 问题,还与 Sharepoint 相关。SharePoint 中的很多引用都是通过使用 url 作为起点来完成的(只需查看 SPSite 的构造函数)。然后将该 url 与 SharePoint 的 Config 数据库中的已知 url 进行比较。(以及站点内容数据库中的 ofr 文件等)。

SharePoint 使用称为备用访问映射的系统将不同的 url 分配给 Web 应用程序的“区域”(默认、Intranet、Internet ......自定义定义)。如果它没有找到“确切”的 Url,内部的东西将会失败(尤其是搜索非常“Urlsensitive”)。

然后是 IIS 部分:由于 IIS 可能没有其他站点在 80 端口上运行,并且没有特定的主机头(因此默认为机器名),或者主机头设置为机器名称,IIS 将接收请求并且由于 SharePoint 绑定到此 web 应用程序,SharePoint 将尝试处理它,查找 url,Sharepoint 找不到 Url 并且“中断”。

在 SharePoint 中创建新的 Web 应用程序时,如果将 hostheader 字段留空,则会出现 no hostheader。

于 2010-01-03T22:26:58.077 回答