【问题标题】:Building SOAP Listener with Azure Functions使用 Azure Functions 构建 SOAP 侦听器
【发布时间】:2017-05-08 14:12:51
【问题描述】:

我正在使用 Azure Functions 在各种系统之间构建一些集成。我的新要求是响应 Salesforce 中的记录更新。一些快速的研究从 Salesforce 方面产生了一个看起来不错的解决方案。使用可以在记录修改时发送 SOAP 请求的出站消息传递。

如何创建 Salesforce 应用程序,以便在创建/更改记录时将记录发送到外部 Web 服务(https://salesforce.stackexchange.com/questions/73425/how-to-create-salesforce-application-that-will-send-record-to-external-web-servi)

现在的挑战是能够在 Azure Function 中创建 SOAP 侦听器。我已经为我的其他监听器创建了基本的 HTTP 触发器。 Azure Functions 中是否有任何“内置”功能可以让我轻松使用传入的 SOAP 请求?

Salesforce 具有基于更传统的 Web 服务和 ASMX 文件的解决方案的基础知识,但我不确定是否或如何将其应用于 Azure Functions。 (https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_om_outboundmessaging_listener.htm)

【问题讨论】:

    标签: azure soap salesforce azure-functions


    【解决方案1】:

    该通知只是通过 HTTP 发出的 SOAP 请求,因此与常规 HTTP 触发请求并没有太大区别。

    虽然您可以将其视为一个普通请求并自己解析内容,但 Azure Functions 确实公开了我们从 ASP.NET WebHooks 获得的出色 WebHook 支持,幸运的是,有一个 Salesforce receiver这大大简化了这项任务。

    免责声明:值得注意的是,虽然接收器在 Azure Functions 中已在技术上启用,但尚无官方支持,因此您不会找到很多文档,并且帮助仅限于你在 SO 和论坛上得到了什么。对此接收器和其他接收器的官方支持有望很快到来,这意味着文档、模板和 UI 支持将可用。

    要开始,您需要以下内容:

    • 创建一个新函数,选择 GenericWebHook - CSharp 模板(这也适用于节点,但我将重点介绍 C#。
    • 按照ASP.NET WebHooks integration with Salesforce post 中列出的步骤创建出站消息。在这里,您要使用门户网站提供的 Function Url 没有代码查询字符串(那里有代码不会受到伤害,但接收者不会使用它信息)。
      • 重要提示:获取您的 Salesforce 组织 ID,该 ID 将用于身份验证,位于 Administer > Company Profile > Company Information > Salesforce.com Organization ID 下并返回 Azure功能门户,打开 Keys 面板,删除您的 default 功能键(不是主机键)并创建一个名为 default 的新键(此名称很重要)使用您从 Salesforce 获得的组织 ID 值。
    • 转到集成
      • 在集成页面上,选择右上角的高级编辑器(如上所述,没有官方支持,因此 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 接收器的亮点!它将为您解析通知,公开您可以使用的强类型对象。您需要做的就是修改您通过模板获得的方法/函数签名以使用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 函数中的 SOAP。
    猜你喜欢
    • 2023-03-18
    • 2021-02-18
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多