Cometd/bayeux 客户端 + salesforce 流 API 问题

问题描述 投票:0回答:2

我有我的 .NET 客户端(Windows 服务),它订阅 Salesforce 流 API 推送主题。

我能够连接到 Salesforce 并可以向我的客户发送通知。一切正常,但是:

当我更新对象一段时间(可能是 2 小时)后通道上没有活动(Salesforce 对象没有更改)时,我不会收到来自 Salesforce 的任何通知。

我曾尝试将侦听器放入日志中,并在日志中显示如下

{"clientId":"f6xo67iet55w5j7ek6ldw72nfc6","channel":"/meta/connect","id":"82","成功":true} 5/15/2018 8:12:28 PM

{"advice":{"interval":0,"reconnect":"handshake"},"channel":"/meta/connect","id":"83","error":"403::未知客户端","成功":false} 2018 年 5 月 15 日 8:12:28 PM

{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","advice":{"interval":0,"timeout":110000,"reconnect":"retry"},"channel":"/meta/connect","id" :"85","成功":true} 2018 年 5 月 15 日 8:12:29 下午

{“clientId”:“hbx1v2cxebbeder11s99dqkxmasre”,“频道”:“/meta/connect”,“id”:“86”,“成功”:true} 2018 年 5 月 15 日 8:14:20 下午

{“clientId”:“hbx1v2cxebbeder11s99dqkxmasre”,“频道”:“/meta/connect”,“id”:“87”,“成功”:true} 2018 年 5 月 15 日 8:16:10 下午

因此根据日志,有时我会收到“403::未知客户端”,但紧接着它又再次表示通道成功。

但是正如我所说,当我在 2 小时后尝试更新 Salesforce 对象时(根据日志,连接成功),我没有收到任何通知。

如果我重新启动 Windows 服务并再次收到通知。

在我的客户端中,我使用来自 - https://github.com/couchand/CometD.NET/tree/headers 对于推送主题订阅,我使用这个 - https://github.com/foluis/Salesforce_PushTopics

任何帮助将不胜感激。

salesforce cometd bayeux
2个回答
4
投票

好吧,我终于可以让它工作了。以下是改动

  1. 每当出现“403::Unknown client”时,CometD 就会尝试重新连接(cometd 的默认行为)
  2. 一旦重新连接,所有频道订阅都将被删除(这是 cometd 所做的,它是默认行为)
  3. 所以,解决方案是,我们总是需要在“meta/Handshake”回调中进行频道订阅。这甚至是 cometd.org 也建议这样做的。
  4. 这将确保每次握手通道都同步
  5. 完成此操作后,即使我们没有从 salesforce 更新任何对象,我的 salesforce 同步也可以正常工作,然后在 2 天后尝试它仍然有效。

0
投票

我现在就面临这个问题。浏览完您的帖子后,似乎可以通过添加一些代码来解决。如果可以的话可以分享一下代码吗?

在这里评论作为答案,因为我无法回复之前的评论。

© www.soinside.com 2019 - 2024. All rights reserved.