在MS CRM 2011中用C# ASP.NET创建合约时遇协议异常错误
排查MS CRM 2011创建合约时的System.ServiceModel.ProtocolException错误
先帮你拆解下这个问题的核心:你看到的System.ServiceModel.ProtocolException其实是个“表象”,真正的问题是CRM服务端的IIS返回了500.19内部服务器错误——从响应的HTML内容能明显看到IIS的错误页面,而你的客户端代码期望的是SOAP格式的响应(application/soap+xml),所以才触发了协议不匹配的异常。
针对CRM 2011的场景,给你几个具体的排查方向:
1. 先查服务端的IIS配置(最可能的根源)
500.19错误本质是IIS解析配置时出问题了,重点看这几点:
- web.config语法/配置错误:打开CRM服务站点的web.config(通常在
C:\Program Files\Microsoft Dynamics CRM\CRMWeb目录下),检查有没有未闭合的标签、拼写错误的节点,或者不兼容的配置项——哪怕一个小语法错误都会导致IIS返回500.19。 - 应用池设置:确认CRM对应的应用池是.NET Framework 4.0版本,且运行模式为集成模式(CRM 2011不支持经典模式)。另外,检查应用池是否正常运行,有没有被意外停止。
- 权限问题:应用池的身份(默认是Network Service)需要对CRM安装目录、数据库有读写权限。可以尝试给应用池身份添加对CRMWeb目录的完全控制权限,测试是否解决问题。
2. 验证CRM服务端点是否正常
直接在浏览器里访问CRM的SOAP服务地址,比如http://你的CRM地址/XRMServices/2011/Organization.svc:
- 如果打开后是正常的服务描述页面(显示一堆WSDL内容),那服务端没问题,再排查客户端;
- 如果直接弹出IIS 500.19错误,那百分百是服务端的IIS配置问题,不用查客户端了。
3. 客户端代码/配置的小检查
如果服务端端点正常,再看客户端这边:
- 重新更新CRM服务引用,确保代理类是基于最新的服务端配置生成的;
- 检查客户端的app.config/web.config,确认服务端点的地址、绑定类型和服务端完全一致,特别是绑定的内容类型设置。
4. 额外的快速排查技巧
- 如果是新部署的CRM环境,重新运行Microsoft Dynamics CRM配置向导,选择“修复”或“重新配置”选项,让系统自动修复IIS配置和服务注册;
- 查看IIS的详细错误日志(在IIS管理器→站点→日志里),里面会有500.19的具体错误代码(比如0x8007000d表示配置文件格式错误),能帮你精准定位问题。
内容的提问来源于stack exchange,提问作者Mayank Rai
相关产品推荐
相关产品推荐

