我使用从Win 2003虚拟机到Win 2008 VM的数据库附加方法将我的开发SP 2007内容数据库转换为SP 2010。在我的旧VM上一切正常,并且在我们的生产服务器(SP 2010,Win 2008)上运行良好,由管理员转换。但是我的新开发虚拟机似乎有一个问题:我们使用自定义的EditForm.aspx来为我们的一个SP库捕获用户的元数据。当用户从库项目的ECB中选择“编辑属性”时,它们会获得我们的自定义EditForm(我们使用SP Designer将默认的EditForm更改为用户自己的)。此EditForm应用程序安装在IIS中的SharePoint应用程序下。在后面的EditForm代码中,我们调用SP Lists Web服务的UpdateListItems Web方法。当它遇到该行代码时,它会抛出401 Unauthorized错误。这就是问题所在。
我在后面的代码中使用DefaultCredentials,在web web.configs(两者:inetpub / wwwroot / wss / Virtualdirectories下的一个和14 hive Config文件夹中的一个)中的impersonate已设置为true我的自定义EditForm.aspx应用程序的web.config; web.config也有Windows Auth。模式设置为ture;在IIS中我只启用了ASP.NET模拟和Windows身份验证(禁用匿名,基本,摘要和表单身份验证)。在inetpub日志文件中,我看到尝试命中/_vti_bin/Lists.asmx正在使用NT Authority / IUSR帐户(不是我当前登录的帐户),SP应用程序的应用程序池的标识是Administrator,这是我登录的内容;管理员拥有农场,网站集,网站和图书馆的全部权限;我可以通过浏览器点击SP Web服务;如果我将EditForm应用程序的web.config更改为使用显式acct(管理员帐户和p / w)进行模拟,那么它可以正常工作,但我不能使用它,因为这不是我们的生产web.config的设置方式,我们将丢失在项目的版本历史记录中更改的ID。
所以,我在机器设置中错过了模拟(委托?)设置。所有现有代码都在Win 2008中移植到SP 2010而没有代码模型或对EditForm web.config文件的更改(将生产与我的比较),它在那里工作,而不是在我的VM上。我已经看到很多这样的帖子,提供的解决方案是更改代码,或者使用显式登录ID进行模拟,或者更改为Kerberos。这些解决方案都不适合我。我需要保持代码和web.config与生产中运行的相同。此外,我们希望模拟工作,因为我们希望用户的凭据由SP列表Web服务进行身份验证,而不是使用某些帐户。总是成功通过身份验证(安全问题),我们希望更新的库项目的版本历史记录能够反映上次更新项目的实际用户ID,并且在生产时就可以了。
StackOverflow上发布的这个问题很接近,但解决方法是更改为Kerberos,我没有这个选项:“使用模拟的IIS 7.5站点没有访问Sharepoint Web服务的权限”
答案 0 :(得分:0)
解决了它。在将SP 2007转换为SP 2010的过程中,我需要在SP 2010中重新创建一个与SP 2007中的原始文档相匹配的Web应用程序。问题是,我选择了“基于声明的身份验证”而不是“经典” 。在本文中:http://technet.microsoft.com/en-us/library/cc262350(v=office.14).aspx,我发现了这句话:“您可以使用任何支持的身份验证方法和基于声明的身份验证模式,或者您可以使用经典模式身份验证,它只支持Windows身份验证。”所以我认为以索赔为基础的是“新的”方式。显然不是。下载我的内容db,从中央管理员删除了web应用程序,使用Classic重新创建了Web应用程序,附加了内容db - 一切都很好。在那里的某处学到了经验。 KevinHou