我正在尝试使用插件和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")]
但似乎没有任何效果。任何想法/建议将不胜感激。 提前谢谢。
答案 0 :(得分:1)
简短的回答是你不能这样做。 Application Insights的当前版本不支持对CRM沙盒插件的代码限制。
此问题已报告并已解决为问题:https://github.com/Microsoft/ApplicationInsights-dotnet/issues/416。
我删除了这段代码,它解决了它试图解决的问题,即某些机器信息调用。它仍然会抛出错误,因为它希望能够尝试读取文件系统 - 它不能。
Application Insights旨在在应用程序的基础层实现(通常但不总是Web应用程序。)在创建自定义插件和工作流活动时,您编写的代码不是该代码。它是基础级应用程序的插件,基础级应用程序不实现Application Insights。
也就是说,沙盒插件中不太需要Application Insights。 Dynamics CRM已经跟踪沙盒插件的插件执行统计信息,可以通过“高级查找”查看。
对于详细跟踪,尤其是异常跟踪,您在插件中有ITracingService
。
答案 1 :(得分:0)
如果您仍想从插件中触发Application Insight,可以通过休息服务进行操作。将所有Application Insights逻辑写入和休息服务,并将其部署在Azure中。然后通过插件代码触发其余服务并传递所需的参数。
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();
}
}
谢谢, 迪利普