Azure Function 应用开发指南

在云计算时代,开发者越来越倾向于使用无服务器架构来构建应用,以减少对基础设施管理的负担。Azure Function是微软Azure提供的无服务器计算服务,允许开发者编写代码而无需管理底层的基础设施、应用依赖关系和其他所需资源。Azure Function 支持多种编程语言,如C#、Java、JavaScript、F#、Python或PHP,并且可以手动执行或自动调度执行。此外,还可以通过触发器来执行函数,触发器可以是另一个Azure服务,也可以是与Azure无关的任何服务。

Azure Function简介

Azure Function是一种轻量级的、事件驱动的计算服务,允许用户编写小段代码来响应各种事件。这些事件可以是HTTP请求、消息队列、定时任务等。Azure Function 可以自动管理扩展,开发者只需关注业务逻辑的实现。

演示示例

本文将演示如何创建一个Azure Function,该函数每小时定时执行一次,从FTP服务器读取CSV文件,并将数据传递给CRM系统。

创建函数应用和函数

要创建一个函数,首先需要创建一个函数应用。如果不想使用现有的资源组和存储,可以创建新的。在Azure门户中打开函数应用并添加一个新函数。设置定时任务,使用cron表达式“0 0 12 * * *”来在每天午夜12点触发函数。

应用设置

为了避免硬编码,可以将CRM连接字符串、FTP URL和凭据作为应用设置添加。例如:

  • FtpId: FTP账户用户ID
  • FtpPassword: FTP账户密码
  • FtpAddress: FTP地址和文件名
  • Connectionstring: Dynamics 365的连接字符串

代码示例

以下是一个C#语言的Azure Function示例代码,用于从FTP服务器读取CSV文件并将其内容上传到CRM系统。

using System; using System.Configuration; using System.IO; using System.Net; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Tooling.Connector; public static void Run(TimerInfo myTimer, TraceWriter log) { log.Info($"Execution Started. : {DateTime.Now}"); Stream fileStream = null; string[] fileContentToWriteToCRM; IOrganizationService org; string ftpId = ConfigurationManager.AppSettings["FtpId"].ToString(); string ftpAddress = ConfigurationManager.AppSettings["ftpAddress"].ToString(); string ftpPassword = ConfigurationManager.AppSettings["ftpPassword"].ToString(); // Read Ftp File(s) FtpWebRequest ftpReq = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(ftpAddress); ftpReq.Credentials = new NetworkCredential(ftpId, ftpPassword); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ftpReq.EnableSsl = false; WebResponse tmpRes = ftpReq.GetResponse(); fileStream = tmpRes.GetResponseStream(); // ProcessData TextReader tmpReader = new StreamReader(fileStream); var txtData = tmpReader.ReadToEnd(); fileContentToWriteToCRM = txtData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); // CRM Data Posting string connectionstring = ConfigurationManager.AppSettings["connectionstring"]; CrmServiceClient conn = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connectionstring); org = (IOrganizationService)conn.OrganizationWebProxyClient != null ? (IOrganizationService)conn.OrganizationWebProxyClient : (IOrganizationService)conn.OrganizationServiceProxy; log.Info($"CRM connection established"); log.Info($"Looping to move data to CRM"); foreach (var row in fileContentToWriteToCRM) { var rowvalues = row.Split(','); Entity lead = new Entity("lead"); lead.Attributes["subject"] = rowvalues[0].ToString(); lead.Attributes["firstname"] = rowvalues[1].ToString(); lead.Attributes["lastname"] = rowvalues[2].ToString(); var id = org.Create(lead); log.Info($"Lead created in CRM with GUID : {id}"); } log.Info($"Loop Ended moved all data to CRM"); }

添加依赖

由于代码使用了CRM SDK中的程序集,需要将这些添加到代码中。在Azure Function中,可以通过添加project.json文件来实现,然后添加NuGet包。

{ "frameworks": { "net46": { "dependencies": { "Microsoft.CrmSdk.CoreAssemblies": "9.0.0.0", "Microsoft.CrmSdk.XrmTooling.CoreAssembly": "9.0.0.7" } } } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485