使用 Azure Functions 构建 SOAP 侦听器
Building SOAP Listener with Azure Functions
我正在使用 Azure Functions 在各种系统之间构建一些集成。我的新要求是响应 Salesforce 中的记录更新。一些快速研究从 Salesforce 方面得出了一个看起来不错的解决方案。使用可以在记录修改时发送 SOAP 请求的出站消息传递。
如何创建在记录 created/changed(https://salesforce.stackexchange.com/questions/73425/how-to-create-salesforce-application-that-will-send-record-to-external-web-servi)
时将记录发送到外部 Web 服务的 Salesforce 应用程序
现在的挑战是能够在 Azure Function 中创建 SOAP 侦听器。我已经为其他侦听器创建了基本的 HTTP 触发器。 Azure Functions 有什么 "built-in" 可以让我轻松使用传入的 SOAP 请求吗?
Salesforce 具有基于更传统的 Web 服务和 ASMX 文件的解决方案的基础知识,但我不确定是否或如何将其应用于 Azure Functions。 (https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_om_outboundmessaging_listener.htm)
该通知只是通过 HTTP 发出的 SOAP 请求,因此与常规 HTTP 触发请求并没有太大区别。
尽管您 可以 将其视为普通请求并自行解析内容,但 Azure Functions 确实公开了我们从 ASP.NET WebHooks, and luckily, there is a Salesforce receiver 获得的强大 WebHook 支持,这大大简化了这个任务。
免责声明:值得注意的是,虽然接收器在技术上已在 Azure Functions 中启用,但尚无官方支持,因此您不会找到很多文档和帮助将仅限于您在 SO 和论坛上获得的帮助。对这个和其他接收器的官方支持有望很快到来,这意味着文档、模板和 UI 支持将可用。
要开始,您需要满足以下条件:
- 创建一个新函数,select使用 GenericWebHook - CSharp 模板(这也适用于节点,但我将在这里重点介绍 C#。
- 按照 ASP.NET WebHooks integration with Salesforce post 中概述的步骤创建出站消息。在这里你想使用 函数 Url 由门户 没有代码查询字符串 给你(有代码就不会'没有伤害,但接收者不使用该信息)。
- 重要:获取您的 Salesforce 组织 ID,该 ID 将用于身份验证,位于 管理 > 公司简介 > 公司信息 > Salesforce.com Organization ID 并返回 Azure Functions 门户,打开 Keys 面板,删除 default 功能键(不是主机键) 并使用您从 Salesforce 获得的组织 ID 值创建一个名为 default(此名称很重要)的新密钥。
- 转到整合
- 集成页面右上角select高级编辑器(如前所述,没有官方支持,所以UI不暴露这个。我们正在戴上探索者的帽子,并在这里冒险进入更高级的工作流程:) )
- 将
webHookType
属性 值更改为 sfsoap
并保存配置。您的 function.json 配置应如下所示:
function.json:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"webHookType": "sfsoap",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}
- 切换到开发 选项卡。我们准备好编写代码了。
这就是 ASP.NET WebHooks 接收器的亮点!它将为您解析通知,公开您可以使用的强类型对象。您需要做的就是修改使用模板获得的 method/function 签名以使用 SalesforceNotifications
类型,确保您引用所需的程序集(Microsoft.AspNet.WebHooks.Receivers.Salesforce
,它可供您使用, 所以不需要包参考) 和命名空间参考 (Microsoft.AspNet.WebHooks
).
这是一个函数的完整示例,它将接收请求并记录组织 ID、操作 ID、获取第一个通知并记录其所有属性:
#r "Microsoft.AspNet.WebHooks.Receivers.Salesforce"
using Microsoft.AspNet.WebHooks;
public static void Run(SalesforceNotifications req, TraceWriter log)
{
log.Info($"Salesforce webhook was triggered!");
log.Info(req.OrganizationId);
log.Info(req.ActionId);
var notification = req.Notifications.First();
foreach (var p in notification.Keys)
{
log.Info($"{p} = {notification[p]}");
}
}
官方支持接收器后,这个过程会顺利很多,但即使增加了步骤,这仍然比必须自己解析 SOAP 消息要好:)
希望对您有所帮助!
我正在使用 Azure Functions 在各种系统之间构建一些集成。我的新要求是响应 Salesforce 中的记录更新。一些快速研究从 Salesforce 方面得出了一个看起来不错的解决方案。使用可以在记录修改时发送 SOAP 请求的出站消息传递。
如何创建在记录 created/changed(https://salesforce.stackexchange.com/questions/73425/how-to-create-salesforce-application-that-will-send-record-to-external-web-servi)
时将记录发送到外部 Web 服务的 Salesforce 应用程序现在的挑战是能够在 Azure Function 中创建 SOAP 侦听器。我已经为其他侦听器创建了基本的 HTTP 触发器。 Azure Functions 有什么 "built-in" 可以让我轻松使用传入的 SOAP 请求吗?
Salesforce 具有基于更传统的 Web 服务和 ASMX 文件的解决方案的基础知识,但我不确定是否或如何将其应用于 Azure Functions。 (https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_om_outboundmessaging_listener.htm)
该通知只是通过 HTTP 发出的 SOAP 请求,因此与常规 HTTP 触发请求并没有太大区别。
尽管您 可以 将其视为普通请求并自行解析内容,但 Azure Functions 确实公开了我们从 ASP.NET WebHooks, and luckily, there is a Salesforce receiver 获得的强大 WebHook 支持,这大大简化了这个任务。
免责声明:值得注意的是,虽然接收器在技术上已在 Azure Functions 中启用,但尚无官方支持,因此您不会找到很多文档和帮助将仅限于您在 SO 和论坛上获得的帮助。对这个和其他接收器的官方支持有望很快到来,这意味着文档、模板和 UI 支持将可用。
要开始,您需要满足以下条件:
- 创建一个新函数,select使用 GenericWebHook - CSharp 模板(这也适用于节点,但我将在这里重点介绍 C#。
- 按照 ASP.NET WebHooks integration with Salesforce post 中概述的步骤创建出站消息。在这里你想使用 函数 Url 由门户 没有代码查询字符串 给你(有代码就不会'没有伤害,但接收者不使用该信息)。
- 重要:获取您的 Salesforce 组织 ID,该 ID 将用于身份验证,位于 管理 > 公司简介 > 公司信息 > Salesforce.com Organization ID 并返回 Azure Functions 门户,打开 Keys 面板,删除 default 功能键(不是主机键) 并使用您从 Salesforce 获得的组织 ID 值创建一个名为 default(此名称很重要)的新密钥。
- 转到整合
- 集成页面右上角select高级编辑器(如前所述,没有官方支持,所以UI不暴露这个。我们正在戴上探索者的帽子,并在这里冒险进入更高级的工作流程:) )
- 将
webHookType
属性 值更改为sfsoap
并保存配置。您的 function.json 配置应如下所示:
function.json:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"webHookType": "sfsoap",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}
- 切换到开发 选项卡。我们准备好编写代码了。
这就是 ASP.NET WebHooks 接收器的亮点!它将为您解析通知,公开您可以使用的强类型对象。您需要做的就是修改使用模板获得的 method/function 签名以使用 SalesforceNotifications
类型,确保您引用所需的程序集(Microsoft.AspNet.WebHooks.Receivers.Salesforce
,它可供您使用, 所以不需要包参考) 和命名空间参考 (Microsoft.AspNet.WebHooks
).
这是一个函数的完整示例,它将接收请求并记录组织 ID、操作 ID、获取第一个通知并记录其所有属性:
#r "Microsoft.AspNet.WebHooks.Receivers.Salesforce"
using Microsoft.AspNet.WebHooks;
public static void Run(SalesforceNotifications req, TraceWriter log)
{
log.Info($"Salesforce webhook was triggered!");
log.Info(req.OrganizationId);
log.Info(req.ActionId);
var notification = req.Notifications.First();
foreach (var p in notification.Keys)
{
log.Info($"{p} = {notification[p]}");
}
}
官方支持接收器后,这个过程会顺利很多,但即使增加了步骤,这仍然比必须自己解析 SOAP 消息要好:)
希望对您有所帮助!