我们有一个拥有2台服务器的服务器场。 我已对两台服务器上的web.config应用了一些更改。 (我有一个特定的Web应用程序,即我已在我的sharepoint Web应用程序的web.config中应用了更改,而不是默认的Sharepoint站点或中央管理站点) 但似乎Sharepoint没有考虑到这些变化! 例如,我添加了一个程序集引用....但sharepoint仍然抛出一个程序集引用异常。我不得不将程序集引用添加到每个控件。 我还增加了执行超时但它仍然提供超时。
这仅在生产环境中发生。
在测试中(有一个服务器)我更新web.config并且所有更改都有效。
是不是因为我不应该更新网络配置。我注意到有一个SPWebConfigModification类。我必须使用它吗?它不会像我手工做的那样做同样的改变。
更新.... 我现在已经使用了SPWebConfigModification并且也做了一个iisreset ......但是改变被忽略了!
更新2 ...
有关我的web.config更新的更多详细信息
我在assemmblies sectuion下添加了一个程序集引用,有些像这样: 这不起作用,因为Sharepoint仍然抛出无法找到程序集的异常。 此问题仅发生在生产环境中。在开发和测试中,我也收到了异常但是当我添加上面的程序集引用时,错误消失了。
另一件不起作用的是executionTimeout。我已将此添加到生产环境中,但sharepoint仍然提供超时请求。同样,这个条目解决了测试和开发环境中的问题。
答案 0 :(得分:1)
正如您所指出的,您需要使用SPWebConfigModification类进行这些更改。可以手动进行更改,但是,这通常会导致由复制问题等引起的随机问题....
SPWebConfigModification类将确保更改存储在SP数据库中并代表您修改web.config文件。
答案 1 :(得分:1)
我为Sharepoint 2007为此写了这个,我认为你需要修改模拟(RunWithElevatedPrivileges),但其余部分应该有效:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSecurity.RunWithElevatedPrivileges(delegate() {
try
{
Trace.WriteLine("Try to modify web.config");
SPWebApplication myWebApp = ((SPWeb)properties.Feature.Parent).Site.WebApplication;
WebConfigModifier mod = new WebConfigModifier(myWebApp, OwnerString);
mod.AddModification(
"SafeControl[@Assembly='Elsni.WorldsBestProgram, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7639c2c71f2f003']",
"configuration/SharePoint/SafeControls",
"<SafeControl Assembly='Elsni.WorldsBestProgram, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7639c2c71f2f003' Namespace='GFA.UniversalListSyncSolution' TypeName='*' Safe='True' />"
);
mod.AddModification(
"add[@key='PropertiesSiteUrl']",
"configuration/appSettings",
"<add key=\"PropertiesSiteUrl\" value=\"http://iei-developersy/sites/gfaadmin/\" />"
);
mod.Update();
Trace.WriteLine("Done.");
}
catch (Exception ex)
{
Trace.WriteLine("ERROR while activating feature: " + ex.Message);
}
}
});
}