据我所知,Dynamics CRM工作流的调试方式有几种:
Throw抛出异常错误
使用TracingService
服务器附加进程调试
对于插件有PluginProflier
以上几中方式各有优缺点。
抛出异常错误:快速查看少量对象值,对于多个对象或调试条件分支,需要不断地试错。
使用TracingService:可记录执行过程,需要开启日志监控,不能即时跟踪对象。
服务器附加进程:可即时跟踪对象,需要服务器权限并登录服务器。
下面记录下使用本地远程调试的过程
工具准备:
Visual Studio 2017
Visual Studio 2017 远程工具
工具下载地址:https://www.visualstudio.com/zh-hans/downloads/
首先,我这里使用SDK的Sample来创建一个自定义工作流活动,记得程序集要签名
然后使用插件注册工具,注册自定义工作流活动
注册类型这里我选择Sandbox
接着在CRM里面自定义一个工作流,在创建完客户之后执行此工作流。
接下来需要在远程服务器运行RemoteDebugger,下载安装完后,在开始里搜索
打开Remote Debugger
这时就可以在客户机使用VisualStudio 附加远程进程了。
打开前面创建的自定义工作流活动项目CustomWFActivity,选择VisualStudio菜单-》调试-》附加到进程,点击查找
弹出防火墙提示,点击允许访问。
这时可以看到远程服务器名称及IP地址
点击该服务器,出现选择按钮。
点击选择,提示输入凭据
如果选择保存凭据
则在控制面板用户帐户凭据管理器 会保存用户名和密码,下次就不再需要输入
输入后,稍等一会就会自动加载远程服务器的进程列表
因为注册自定义工作流活动时,注册类型是SandBox,所以这里要选择Sandbox进程,Sandbox进程有两个,选择WorkerProcess,然后点击附加。
附加完进程之后,设置需要调试的断点。
为了触发工作流,这里我新建一个客户,并保存。
稍等片刻,Visual Studio 2017就会自动弹出界面并中断程序。
接下来,就可以监控到程序运行情况了。
到此,远程调试已经完成,这种调试方式的好处在于即时查看对象值及程序执行情况。
对于插件的调试也是一样的,只是监控的进程不一样,调试插件监控w3wp进程。
如果注册时,注册类型不是Sandbox,那就需要附加进程到CrmAsyncService.exe进程,但这里有两个同名进程,而且无法区分哪个是maintenance进程,可以分别尝试或查看服务器端哪个PID是工作进程
其实,如果服务器能够读取到客户机VisualStudio 的安装目录,就可以直接运行远程调试工具而不用下载。
如果有更好的调试方式,欢迎分享。