在sharepoint开发中遇到的一些问题和解决方案
1.错误类型:
The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.
解决方案:
Microsoft.SharePoint.Administration.SPWebApplication webApp = site.Site.WebApplication;
webApp.FormDigestSettings.Enabled = false;
SPFile spFile = site.Files.Add(fileUpload.FileName, contents);
spFile.Item.Update();
webApp.FormDigestSettings.Enabled = true;
web.AllowUnsafeUpdates = true;
site.AllowUnsafeUpdates = true;如果以上方法还不能解决:把下面的加在你的页面上[我调用Microsoft.Office.Server.UserProfiles.UserProfile.commit()方法遇到过一次]
<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls" TagPrefix="sharepoint" %><sharepoint:FormDigest ID="FormDigest1" runat="server"/>注意:加上该控件在vs上运行会报错,但是放在sharepoint环境下则一切正常!
其他请参见:http://blog.crsw.com/2011/04/23/validateformdigest/
另,我在sharepoint2013中,web.AllowUnsafeUpdates = true;有时候放在update()方法前,也会提示错误,在获取web后,执行任何操作前设置web.AllowUnsafeUpdates = true;即可, 记住,如果顽固出现这个错误,把该设置放在获取web的下面。
2. 错误类型 :
在sharepoint中报 未知错误
解决方案:
在该站点下的配置文件里面修改以下节点
1.<SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
改为:
<SafeMode MaxControls="200" CallStack="true" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
2.<customErrors mode="On " /> 改为:<customErrors mode="Off " />
3.<compilation batch="false" debug="false ">改为; <compilation batch="false" debug="true ">
修改后就会把错误源显示出来,总比报"未知错误"好吧!
3. 错误类型 :
Unable to serialize the session state. In 'StateServer' and 'SQL Server' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
解决方案:
被使用的类必须标记为可序列化!
4.错误类型 :
如果配置好的sharepoint,也在同一个域,把用户加进了网站的成员组里面,但是该组里面的成员还是不能访问
解决方案:
请关闭防火墙。![如果报访问受限,则把成员加进网站的成员组里面]
4. 错误类型 :
Operation is not valid due to the current state of the object
解决方案:提升权限
SPSecurity.RunWithElevatedPrivileges(delegate() {
SPSite site = new SPSite(http://mossserver);
SPWeb web = site.OpenWeb();
using (site)//...
});
或者:
private string GetPictureUrl(string loginName)
{
SPSite site = null;
SPWeb web = null;
using (site = new SPSite(mySiteUrl))
{
using (web = site.RootWeb)
{
web.AllowUnsafeUpdates = true;
ServerContext ctx = ServerContext.GetContext(site);
UserProfileManager profileMgr = new UserProfileManager(ctx);
if (HttpContext.Current != null)
{
if (HttpContext.Current.Items["HttpHandlerSPWeb"] == null)
{
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
}
if (HttpContext.Current.Items["Microsoft.Office.ServerContext"] == null)
{
HttpContext.Current.Items["Microsoft.Office.ServerContext"] = ctx;
}
}
if (profileMgr.UserExists(loginName))
{
//Microsoft.SharePoint.Portal.UserProfiles.UserProfile up = upMan.GetUserProfile(loginName);
Microsoft.Office.Server.UserProfiles.UserProfile up = profileMgr.GetUserProfile(loginName);
if (!string.IsNullOrEmpty(up[PropertyConstants.PictureUrl].Value as string))
{
return up[PropertyConstants.PictureUrl].Value.ToString();
}
else { return “”; } }
注意,不能乱提升权限,因为提升权限后一切都是System Account用户的操作!比如是别人回复的博客和 Discussions 的回复人都是"System Account"这个人!这个当然是不对的了!
5.错误类型: Illegal characters in path. 【路径中非法字符。】
A: 在把UserControl配置到sharepoint里面时
<%@ Register src="~/_controltemplates/revolution9000/ [这里换行了]
GroupBlogPostInfo.ascx" tagname="GroupBlogPostInfo" tagprefix="uc1" %> 如果要换行,则可以在 tagname 那里换行!每个属性的值不能截断 这个问题太变态!找这个问题 郁闷惨了! 还是同事Bobby找到的,我可以没有那么好的耐心.
6.错误类型:Visual Studio 2008的代码度量和引用的程序集
在不同的创作后的今天早些时候的过程中,我偶然发现一个错误,同时使用代码度量在Visual Studio 2008的功能。 在点击 分析 菜单,然后点击 代码度量的计算解决方案 ,我遇到的解决方案在几个项目的错误类似于以下内容: 发生错误时计算目标文件『E代码度量:\ NotBackedUp \ ...'项目...下面的错误阅读时遇到模块'Microsoft.SharePoint':无法解析类型:?Ť?对象模型?。 英文错误:[Project: Revolution.WebSite
Configuration: Debug
Scope: None
Assembly: C:\Users\User\Desktop\2010-01-06\kkjhjhjhjhjhjhjhjhjhk\SharePointObject\Revolution.WebSite\bin\Revolution.WebSite.dll
Maintainability Index:
Cyclomatic Complexity:
Depth of Inheritance:
Class Coupling:
Lines of Code:
Message: An error occurred while calculating code metrics for target fil 'C:\Users\User\Desktop\2010-01-06\kkjhjhjhjhjhjhjhjhjhk\SharePointObject\Revolution.WebSite\bin\Revolution.WebSite.dll' in project Revolution.WebSite. The following error was encountered while reading module 'Microsoft.SharePoint': Could not resolve type: T ObjectModel.]
(不要问我,'?'字的意思应该是 - 我只是复制和粘贴从Visual Studio中直接完成。)
原来,这是在Visual Studio 2008已知的错误,由于默认设置,允许家属集会在一个项目中使用没有明确引用它们。
解决方法是明确的依赖程序集添加到项目。
引用后明确 Microsoft.SharePoint.Security到报错的项目里面!添加引用就可以了!
7.错误类型:
未能加载文件或程序集“Microsoft.SharePoint.Library, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到指定的文件。
没有sharepoint环境!必需运行在装有sharepoint环境的机子运行!
8.错误类型:
浏览本机上sharepoint网站:如http://mossserver 出现了Service Unavailable 错误![503] 我已经第二次遇到了!
打开server Manager,查看9000端口的服务是否启动!如果已开启还是出现了那个问题! 请在查看 application Pool[应用程序池] 很有可能是application Pools里面的9000端口的服务没有启动!右键启动即可
9.
<script type="text/javascript"> //<![CDATA[ function WebForm_OnSubmit() { UpdateFormDigest('\u002f\u002f', 1440000); return true; } //]]> </script> 此段代码报JS错误.
Check in your master page for the following code (something like this): <body scroll="yes" onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();"> <form id="Form2" runat="server" onsubmit="return _spFormOnSubmitWrapper();"> Modify the above to the following code: <body scroll="yes" onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();"> <form id="Form3" runat="server" onsubmit="return WebForm_OnSubmit();"> <script type="text/javascript"> function WebForm_OnSubmit() { UpdateFormDigest('\u002f', 1440000);return _spFormOnSubmitWrapper(); return true; } </script>
10.在自定义开发 SPListItem newItem = SPUtility.CreateNewDiscussion(list.Items, title); 创建一个Discussion回复的时候,如果Title的长度大于255则会抛出这个异常.因为sharepoint里面Single line of text的默认长度为255Invalid text value A text field contains invalid data. Please check the value and try again. 相关链接:http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/7bb16e51-e7cc-439e-a8b3-755683ccac1a/
<asp:TextBox ID="tbSubject" runat="server" Width="640px" MaxLength="255" /> 设置最大输入值属性, 或者修改Discussion里面Title列长度
11.在VS中,有时编辑一个CS文件会报拒绝访问。 D:\Revolution.WebSite\Revolution.WebSite.csproj: Access to the path 'D:\Revolution.WebSite\Revolution.WebSite.csproj' is denied.或者报其他.cs文件不能访问!
没有执行下面的vs状态…执行步骤: Debug –> attach to process… 弹出以下窗口,选中W3wp.exe后点击Attach按钮, 以次操作和上面比较,后面加了个 (Administrator)