使用 Azure Application Insights 的 Dynamics CRM 365(在线)插件异常 EnvironmentPermission

Dynamics CRM 365 (Online) plugin exception EnvironmentPermission using Azure Application Insights

我正在尝试使用插件和 Azure Application Insights 跟踪自定义事件。当我构建插件时,我使用 MSBuild.ILMerge.Task 将 Application.Insights.dll 与我的插件程序集合并。这是我的步骤 接下来进行合并: http://dynamicscrmcoe.com/il-merge-dynamics-crm-plugins/

我遇到的问题是,当我尝试实例化遥测客户端时:

var telemetryClient = new TelemetryClient();

我收到这个错误:

Request for the permission of type System.Security.Permissions.EnvironmentPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

我尝试过使用安全属性授予权限:

[EnvironmentPermission(SecurityAction.Assert, Unrestricted = true)]

也尝试过

[PermissionSet(SecurityAction.Assert, Name = "FullTrust")]

但似乎没有任何效果。任何 ideas/advice 将不胜感激。 提前致谢。

简短的回答是你不能这样做。当前版本的 Application Insights 不支持对 CRM 沙盒插件的代码限制。

这已作为问题报告并解决:https://github.com/Microsoft/ApplicationInsights-dotnet/issues/416

我提取了这段代码,它解决了它试图解决的问题,即某些机器信息调用。它仍然会抛出错误,因为它希望能够尝试读取文件系统——但它不能。

Application Insights 旨在在应用程序(通常但不总是 Web 应用程序)的基础级别实施。创建自定义插件和工作流活动时,您正在编写的代码不是该代码.它是基础级应用程序的插件,该基础级应用程序未实现 Application Insights。

也就是说,在沙盒插件中对 Application Insights 的需求不大。 Dynamics CRM 已经跟踪沙盒插件的插件执行统计信息,可以通过高级查找查看。

对于详细的跟踪,尤其是异常跟踪,您在插件中有 ITracingService

如果您仍想从插件中触发 Application Insight,可以通过休息服务来实现。将所有 Application Insights 逻辑写入并休息服务并将其部署在 Azure 中。然后通过插件代码触发rest服务并传递需要的参数。

var uri = new Uri("learningportalservices.azurewebsites.net/.../success");
var request = WebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Get;
request.ContentType = "application/json";
using (var response = request.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
string result = reader.ReadToEnd();
}
}

谢谢, 迪利普