如何将ASP/ASP.NET(C#)网页集成至Dynamics CRM 2015?求建议
集成ASP/ASP.NET网页到Dynamics CRM 2015的解决方案与建议
首先要明确:你发现的Web资源限制是正常的——CRM的Web资源仅支持静态资源(HTML、CSS、XML等)或客户端可执行的脚本/文件,而ASP/ASP.NET是服务器端运行的技术,无法直接作为Web资源上传到CRM。下面针对两种场景给出具体方案:
一、ASP网页集成到CRM 2015
最直接且常用的方式是通过IFrame嵌入:
- 第一步:将你的ASP网页部署到独立的IIS服务器上,确保CRM服务器或客户端浏览器能访问到该页面的公开URL(比如
http://your-server/your-asp-page.asp)。 - 第二步:在CRM中添加IFrame控件:
- 如果你想在实体表单中嵌入,进入对应实体的表单编辑器,插入IFrame组件,设置其“URL”为你的ASP页面地址。
- 若要在仪表盘或自定义页面嵌入,可通过CRM的“自定义系统”创建新的仪表盘或网页资源容器,再添加IFrame。
- 第三步:处理安全与权限:
- 将ASP页面的域名添加到CRM的受信任站点列表(在CRM设置的“管理”→“系统设置”→“安全”选项卡中配置),避免浏览器的安全拦截。
- 如果ASP页面需要访问CRM数据,可以在IFrame的URL中传递CRM上下文参数,比如当前记录ID:
http://your-server/your-asp-page.asp?recordId={!Entity.Id},然后ASP页面通过这个ID调用CRM的SOAP或REST API获取数据。
二、基于C#的ASP.NET网页集成建议
ASP.NET的集成方式更灵活,除了IFrame嵌入,还可以结合CRM的扩展能力实现更深度的集成:
1. IFrame嵌入进阶版
和ASP的嵌入逻辑类似,但ASP.NET可以利用更强大的后端能力:
- 部署ASP.NET应用到IIS后,在IFrame的URL中传递CRM用户身份信息(比如通过CRM的
GetGlobalContext()获取用户令牌),让ASP.NET页面验证用户身份,确保只有CRM授权用户能访问。 - ASP.NET后台可以直接调用CRM的Web API或Organization Service,实现数据的双向同步(比如读取CRM客户数据展示,或提交表单数据到CRM创建记录)。
2. 分离前端与后端:Web资源+ASP.NET Web服务
如果不想用IFrame,可采用“前端Web资源+后端ASP.NET服务”的架构:
- 在CRM中创建HTML/JS类型的Web资源作为前端界面,负责用户交互。
- 将ASP.NET的业务逻辑封装成Web API或WCF服务,部署到你的服务器。
- 前端JS通过AJAX调用ASP.NET服务,实现数据的获取与提交,同时利用CRM的
Xrm.WebApi实现和CRM数据的交互。这种方式体验更接近原生CRM页面。
3. 结合CRM插件/工作流活动(针对业务逻辑集成)
如果你的ASP.NET代码是为了处理CRM的业务流程(比如创建订单后自动触发ASP.NET的业务逻辑),可以将ASP.NET逻辑封装成CRM的插件或自定义工作流活动:
- 用C#编写插件,引用CRM的SDK程序集,将ASP.NET的核心逻辑迁移到插件中,部署到CRM服务器。
- 通过CRM的事件注册器,将插件绑定到对应的实体事件(比如“创建”“更新”),实现业务逻辑的自动触发。
关键注意事项
- 跨域处理:如果ASP/ASP.NET服务器和CRM不在同一域名,需要在ASP.NET服务中配置CORS(跨域资源共享),或者在CRM的系统设置中允许该域名的跨域请求。
- 安全验证:务必确保ASP/ASP.NET页面和CRM之间的通信使用HTTPS,避免数据泄露。可以利用CRM的AD身份验证或OAuth2.0实现用户身份的无缝验证。
- 性能优化:IFrame加载外部页面可能影响CRM的响应速度,建议优化ASP/ASP.NET页面的加载时间,减少不必要的资源加载。
内容的提问来源于stack exchange,提问作者Robert John Sustraido
相关产品推荐
相关产品推荐

