Dynamics crm 2011 在MSCRM 2011插件中实例化SharePoint 2010方法时出现问题

Dynamics crm 2011 在MSCRM 2011插件中实例化SharePoint 2010方法时出现问题,dynamics-crm-2011,dynamics-crm,dynamics-crm-2013,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm 2013,这是关于SharePoint 2010与MSCRM 2011的集成。 在CRM中创建记录时,尝试为该记录和sharepoint中的类似文件夹创建自定义文档位置,以便当用户单击实体记录中的文档链接时,不会提示用户在Sharpoint中创建文件夹(尝试避免sharepoint噪音以获得更好的用户体验) 我已经通过post-create异步插件实现了。(我是通过控制台程序完成的,工作正常)。构建插件在此处输入代码-in并部署到CRM 创建记录时,它会出错,并显示一条消息,如“内部服务器500错误-无法

这是关于SharePoint 2010与MSCRM 2011的集成。 在CRM中创建记录时,尝试为该记录和sharepoint中的类似文件夹创建自定义文档位置,以便当用户单击实体记录中的文档链接时,不会提示用户在Sharpoint中创建文件夹(尝试避免sharepoint噪音以获得更好的用户体验)

我已经通过post-create异步插件实现了。(我是通过控制台程序完成的,工作正常)。构建插件
在此处输入代码
-in并部署到CRM

创建记录时,它会出错,并显示一条消息,如“内部服务器500错误-无法加载带有公钥令牌的程序集等…blab bla bla…”

但是,当我调试插件时,它在我实例化sharePoint的sharePoint方法Create client context的第一行命令失败,它说[System.Security.SecurityException]={“该程序集不允许部分受信任的调用者”。}

根据谷歌的说法,根据这个问题,它应该在程序集信息文件中有一个属性“允许部分用户”。根据我的理解,这应该在中完成,因为请求是从CRM插件到SharePoint dll的。我的意思是共享点dll不允许我的程序集发出请求。我们如何更改它

我引用了Microsoft.SharePoint.client.dll和Microsoft.SharePoint.client.Runtime.dll 克服这个问题的替代方案是什么

如果有人能帮助我,我将不胜感激

这是我的SharePoint代码

ClientContext clientContext = new ClientContext(siteUrl)
CredentialCache cc = new CredentialCache();
 Cc.Add(new Uri(siteUrl), "NTLM", CredentialCache.DefaultNetworkCredentials);
                clientContext.Credentials = cc;
                clientContext.AuthenticationMode = ClientAuthenticationMode.Default;

                Web web = clientContext.Web;
                SP.List list = web.Lists.GetByTitle(listName);
                ListItemCreationInformation newItem = new ListItemCreationInformation();
                newItem.UnderlyingObjectType = FileSystemObjectType.Folder;
                newItem.FolderUrl = siteUrl + "/" + folderlogicalName;

                if (!relativePath.Equals(string.Empty))
                    newItem.FolderUrl += "/" + relativePath;


                newItem.LeafName = newfolderName; 
                SP.ListItem item = list.AddItem(newItem);
                item.Update();
                clientContext.ExecuteQuery();
其中,我将siteurl、folderlogicalname、relativepath和new foldername作为参数传递


这在我的控制台应用程序中运行良好。但是,当转换为CRM插件时,它会出现上面指定的问题。

我以前见过类似的问题

CRM插件在沙盒中运行,因此使用的所有程序集和.NET库都必须允许部分信任调用者(因为CRM沙盒在部分信任下运行)。它在控制台中工作,因为您在该上下文中以完全信任用户的身份执行代码

此问题不一定是您的代码造成的,但可能是依赖关系或.NET库本身不允许部分信任调用者-在您的情况下,听起来Sharepoint库是罪魁祸首(但错误的堆栈跟踪应该准确地揭示原因所在)

由于您无法访问导致问题的源库,因此要克服此错误,您可能必须创建一个包装器。但是,问题是包装器无法直接引用问题库,或者您将遇到相同的问题。因此,要解决此问题,您可能必须创建一个充当包装器的web服务,然后使用cCRM插件中的所有web服务。这样,web服务(即完全信任)将执行完全信任代码,然后将结果返回给调用的CRM插件


这是。

谢谢杰森。这对我有用。 我想对答案补充几点。 1.我已将sharepoint DLL添加到CRM 2011网站的bin文件夹中。 2.还在运行异步作业的文件夹中部署了相同的DLL,以使我的异步插件正常工作


再次感谢您的合作

感谢Jason的回复和详细解释。也许我会采纳您的想法来实现Web服务。但我还有一个问题。据我所知,CRM插件可以在沙盒和数据库中注册。我正在数据库中注册插件,而不是在沙盒模式下。您能解释一下吗We’关于这一点。另一个问题是CRM和SharePoint集成在没有自定义的情况下如何工作。我们不能每次都依赖Web服务来完成这一点。再次感谢您的时间。如果您是本地用户,那么除了将插件注册为完全信任外,您还需要注册任何依赖的[SharePoint]库到CRM服务器上的GAC。