c# - 如何连接到 SharePoint 使用什么用户 在 CRM 插件中确定用户从 CRM 到 SharePoint 的通信
问题描述
这是我所知道的:
我有一个插件在完全信任模式下运行 8.2(又名,不是沙盒)。
Microsoft.SharePoint.Client.ClientContext
它使用来自的凭据创建一个CredentialCache.DefaultCredentials
来执行ExecuteQuery
对 SharePoint 服务器的调用。这会导致 401 未授权错误的异常。有一些自定义异常处理程序将无法连接的用户记录为
WindowsIdentity.GetCurrent().Name
. 返回的值是触发插件运行的用户的域凭据,即使插件设置为在插件注册工具的“在用户上下文中运行”中作为服务帐户运行。在 CRM 2013 中,这似乎以这样一种方式工作,即在插件注册工具中设置为“在用户上下文中运行”用户的服务帐户的凭据是用于与 SharePoint 通信的凭据。升级后,此代码失败。
我试图从 中获取用户名CredentialCache.DefaultCredentials
,但它始终为空。有什么方法可以使用“在用户上下文中运行”用户的网络凭据?
解决方案
在进一步查看日志后,我意识到在其中发出了两个 SharePoint 请求,一个有效,另一个无效。在查看失败的调用时,它是使用多线程方法调用的Task.WaitAll
。发现这个 SO 问题How do I set the user identity for tasks when calling Task.WaitAll()? 并决定尝试使呼叫同步。这成功了!
推荐阅读
- android - 后台服务自动关闭
- go - 如何理解这个规范文本?
- git - Git:使用SSH密钥拒绝权限
- angular - 未知的角元素
- javascript - 创建 ES6 JavaScript 类成员的最有效方法是什么?
- python - 迭代目录中的文件并将具有相同名称的文件放入不同的列表中
- dplyr - 没有适用于 'mutate_' 的方法应用于“c('matrix', 'double', 'numeric') 类的对象
- phpstorm - 如何在 PhpStorm 中的 PHP 文件中突出显示 HTML
- dart - 这两个typedef有什么区别?
- java - 如果文件/连接资源在运行时未关闭,如何查找 Java 资源泄漏。?