MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

上面几篇文章介绍了Microsoft Dynamics CRM 2011中如何进行插件开发,本文将介绍插件的调试。

调试的基本步骤是

1. 注册、部署插件,这部分内容在上一篇Blog中已经介绍,不再赘述;

2. 将插件的pdb文件拷贝到CRM安装目录下的“Server\Bin\Assembly”文件夹下,一般而言,如果使用默认配置安装的CRM系统,那么此文件夹的全路径是“C:\Program Files\Microsoft Dynamics CRM Server\Server\bin\assembly”;

3. 配置调试器,即通过Visual Studio .net的附加到相应进程进行调试:

  • 对于运行于服务器上的插件,需要附加的进程是w3wp.exe进程;
  • 如果是调试脱机客户端中的插件,附加的进程是Microsoft.Crm.Application.Hoster.exe;
  • 如果是异步方式运行的插件,那么附加的进程是CrmAsyncService.exe
  • 如果是运行在沙盒Sandbox中的插件,那么附加的进程是Microsoft.Crm.Sandbox.WorkerProcess.exe

    4. 在插件类中,设置断点;

    5. 开始调试,进行界面操作,以触发插件的运行,以便可以在IDE中开始插件的调试工作。

以下是各个步骤的截屏

1. 插件注册,请参看文章《MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)》;

2. 拷贝pdb文件。首先打开插件项目的文件夹,导航到bin\debug目录下,找到插件程序集相关的pdb文件。如下图的红色方框区域所示

将该文件拷贝到CRM$\Server\Bin\Assembly目录下。

3. 配置调试器,本例中,使用Visual Studio .Net 2010进行调试。点击“调试”—> “附加到进程”,系统弹出“附加到进程”对话框,在其中列出了当前服务器上运行的进程,根据待调试插件的运行模式、部署模式,选择目标进程,而后点击“附加”按钮即可。如果在进程列表中没有目标进程,那么,点击“显示所有会话中的进程”复选框。

在附加w3wp.exe进程时,如果服务器的IIS中有多个站点同时处于活动状态,进程列表中就会出现多个w3wp.exe进程,这些进程之间的区别只是第二列ID列的信息不同,那么哪个进程是我们需要附加的进程呢?对于这种情况,可以通过IIS管理器来获得需要附加的进程。运行IIS管理器,在左侧导航栏中,点击第二个节点,而后再在右侧的内容区域点击“工作进程”,如下图所示。

内容区域会切换到工作进程列表界面,其中显示了当前IIS中所有处于运行状态的W3wp进程,其中第一列是w3wp.exe进程所对应的应用程序池名称,第二列信息就是进程ID。效果如下图所示,其中,蓝色区域圈定的就是进程ID信息,这将会有助于我们在“附加到进程”对话框中选择正确的进程予以附加:

4. 设置断点,这没有啥可以说的了,对于经常使用Visual Studio.Net的各位同学们已经是驾轻就熟;

5. 运行应用程序,或者使用界面操作的方式,或者使用C#开发的测试程序,总而言之,就是调用组织服务,发起某个请求,以触发插件的运行。本例中的插件是注册于account的pre-create事件上。所以呢,就是在crm中新建客户记录的时候会触发插件的运行。ok,通过浏览器操作,新建一条客户记录。记录内容如下图所示。

点击保存按钮,会向MS CRM的组织服务发送创建请求,从而触发插件的运行,此时,由于VS附件到进程已经开启,将可以对插件进行调试了。效果如下图所示:

如果Visual Studio没有被触发,或者插件类的断点没有起作用。首先,要看一下当前MS CRM是否允许进行debug,若否,可打开debug开关。打开Debug开关的步骤如下:

打开CRM$\CrmWeb目录,其中CRM$指的是微软CRM的安装目录,本例中是“C:\Program files\Microsoft Dynamcis CRM Server”;

找到web.config文件,使用任意编辑器打开该文件;

在web.config文件中找到,<compiliation defaultLanguage=”C#” debug=”…>这一句。默认情况下,debug开关的值是false,为了能够调试,需要将其设置为true,设置完成后,重新启动IIS;

设置debug开关项的示意图如下所示。

此外,除了使用调试器进行debug之外,还可以借助日志与跟踪服务,来确定插件的执行顺序,这样可以方便我们在不启用VS等调试工具的前提下,确定问题的根源所在。跟踪服务ITracingService,也是插件执行上下文中的一个组成部分,可以通过IServiceProvider.GetService()方法获得,样例代码例如:

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

ITracingService实例化时候,可以利用trace方法,创建跟踪日志信息,例如

tracingService.Trace(“Plug-in execution begin”);

MSCRM Plugin Debug的更多相关文章

  1. Android 验证APK是否已经签名或是否是Debug签名

    https://source.android.google.cn/ http://www.android-doc.com/tools/publishing/app-signing.html Signi ...

  2. mac 下基于firebreath 开发多浏览器支持的浏览器插件

    mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...

  3. android-包签名

    android-包签名 应用能在Android 系统上安装必须是经过有私有key的证书数据签名.Android系统通过证书确定应用的作者,和与应用建立信任关系.证书不会用于控制应用的安装.证书不需要权 ...

  4. oracle linux 7.3 下用dtrace 跟踪 mysql-community-server-5.6.20

    第一部分:oracle linux 7.3 dtrace 安装: http://public-yum.oracle.com/   内核升极到 [root@server1 SPECS]# uname - ...

  5. bottle源码

    import sys __author__ = 'Marcel Hellkamp' __version__ = '0.13-dev' __license__ = 'MIT' ############# ...

  6. 深入MySQL复制(三):半同步复制

    1.半同步复制 半同步复制官方手册:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html 默认情况下,MySQL的复制是异 ...

  7. centos7下mysql半同步复制原理安装测试详解

    原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...

  8. jmeter sampler maven项目排错记

    eclipse 创建的maven项目,引入jar包之后出现红色叹号,一直找不到原因,连main方法都无法运行,提示找不到类: 错误: 找不到或无法加载主类 soapsampler.SoapSample ...

  9. 【Centos7裁剪】

    #!/bin/sh rootdir=`pwd` rm -rf ${rootdir}/centos* KERNEL_DIR=${rootdir}/kernel ROOTFS_DIR=${rootdir} ...

随机推荐

  1. Day03_JAVA语言基础第三天

    1.位运算符 1.面试题(掌握) ^:一个数据对同一个数据^两次,结果还是数据本身 举例:a ^ b ^ b = a  2.注意 知道结论,面试题,以后就完全不用看了 2.逻辑运算符(掌握)     ...

  2. 隐藏select最右侧的下拉三角图标的css样式

    -webkit-appearance:none; -moz-appearance:none; appearance:none;

  3. 学习使用:before和:after伪元素

    http://www.w3cplus.com/css3/learning-to-use-the-before-and-after-pseudo-elements-in-css.html

  4. jsp不能引用js,cs等解决办法

    最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情,实在无法忍受 问题:部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52 ...

  5. leetcode 121. Best Time to Buy and Sell Stock ----- java

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  6. leetcode 96 Unique Binary Search Trees ----- java

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  7. PHP太怪了,in_array() ,strpos,

    PHP中在某个字符中查找另外一个字符串,是否存在,用的是strpos,此函数用法,经常很多人用反了,正确的用法是strpos(string,search),strstr等,前面是原字符串,后面是要在原 ...

  8. 由<a>标签的onclick影出来的问题

    今天做了一个 通过 document.getElementByName()的方法获得一个标签a的集合.tag_a=window.docu..... 接着需要给每个标签都加一个onclick事件. fo ...

  9. 黑马程序员——JAVA基础之简述集合collection

    ------- android培训.java培训.期待与您交流! ---------- 集合: 为什么出现集合类? •  面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对 ...

  10. dir:一行代码,提取出所有视频文件名称及路径

    某次,部门接到一个任务,要求对公司现有的视频文件资料做一个统计整理分类的工作. 领导召集开会,问:两周时间够用吗? 统计整理分类工作的第一步骤是把视频文件名称来源类别信息录入到 excel 表格中,才 ...