无法在插件注册工具中调试Dynamics C#插件

时间:2018-08-01 14:14:53

标签: c# debugging plugins dynamics-crm microsoft-dynamics

背景

我在内部Dynamics 2016中有一个C#插件,该插件使用一个库来调用其他系统。该库的一部分是使用Web API调用动力学的。我可以看到动态变化,因此该插件正在采取措施,但是我希望它会采取与采取的措施不同的措施。当我尝试使用插件注册工具调试插件时,遇到了一些问题。当我使用Exception方法对插件进行概要分析时,会得到一个异常文件,可以调试到一点。当我到达以下代码时,插件注册工具崩溃,没有错误消息。当我使用“持久化实体”方法进行调试时,我的插件似乎成功了,但是在插件注册工具中未记录任何配置文件。我的插件是由一个操作触发的,该操作是从与完成业务流程相关的工作流触发的(基于this文章)。我最初的问题是here,导致了这个问题。关于让调试器与我的代码一起使用的任何想法?

代码

HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = new NetworkCredential("admin", "password", "DOMAIN") });
client.BaseAddress = new Uri(Helpers.GetSystemUrl(COHEN.APIConnector.Application.Dynamics));
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
client.DefaultRequestHeaders.Add("OData-Version", "4.0");
HttpResponseMessage responseMessage;
string url = "ccseq_clients";

responseMessage = client.GetAsync(url).Result;

1 个答案:

答案 0 :(得分:1)

我记得这个问题,当我调试SharePoint在线REST API调用时,它将始终崩溃。然后,我添加了跟踪服务并记录了检查点以验证代码执行路径。无需调试,我将下载Profiler跟踪日志并在PRT中重播以查看成功或失败分支。

当您将插件跟踪配置为在系统设置下记录全部时,它的开发模式将非常有用。

            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            try
            {
                tracingService.Trace("Attempting to obtain Phone value...");
                phone = account["telephone1"].ToString();

            }

            catch(Exception error)
            {
                tracingService.Trace("Failed to obtain Phone field. Error Details: " + error.ToString());
                throw new InvalidPluginExecutionException("A problem has occurred. Please press OK to continue using the application.");

            }

Reference

在您的情况下:

            if(responseMessage != null)
            {

                tracingService.Trace("API call success & got responseMessage.");

            }
            else
            {

                tracingService.Trace("responseMessage was empty.");

            }