我有我的.NET客户端(Windows服务(,它订阅了Salesforce流API推送主题。
我能够连接到 Salesforce,并可以将通知发送给我的客户。一切正常,但是:
如果我更新对象,一段时间后(可能是 2 小时(频道上没有活动(Salesforce 对象没有更改(,则我没有收到来自 Salesforce 的任何通知。
我尝试将听众放入日志,并在日志中说如下
{"clientId":"f6xo67iet55w5j7ek6ldw72nfc6","channel":"/meta/connect","id":"82","success":true} 2018/5/15 20:12:28 PM
{"建议":{"间隔":0,">重新连接":"握手"},"通道":"/meta/connect","id":"83","错误":"403::未知客户端","成功":false} 2018/5/15 20:12:28 PM
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","advice":{"interval":0,"timeout":110000,"reconnect":"retry"},"channel":"/meta/connect","id":"85","success":true} 2018/5/15 20:12:29
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"86","success":true} 2018/5/15 20:14:20
{"clientId":"hbx1v2cxebbeder11s99dqkxmasre","channel":"/meta/connect","id":"87","success":true} 2018/5/15 20:16:10
所以根据日志,有时我会得到"403::未知客户端",但紧接着它再次说通道成功。
但正如我在 2 小时后尝试更新 Salesforce 对象时所说(根据日志,它连接成功(,我没有收到任何通知。
如果我重新启动我的 Windows 服务并再次收到通知。
在我的客户端中,我正在使用来自 - https://github.com/couchand/CometD.NET/tree/headers 的彗星 对于推送主题订阅,我正在使用这个 - https://github.com/foluis/Salesforce_PushTopics
任何帮助将不胜感激。
好的,我终于可以让它工作了。以下是更改
- 每当出现"403::未知客户端"时,CometD 都会尝试重新连接(Comet 的默认行为(
- 重新连接后,所有频道订阅都将被删除(这是 cometd 所做的,这是默认行为(
- 所以,解决方案是,我们总是需要在"元/握手"回调中进行频道订阅。这是甚至 cometd.org 也建议做的事情。
- 这将确保每次握手时通道都同步
- 这样做后,即使我们不从 salesforce 更新任何对象,我的 salesforce 同步工作正常,然后在 2 天后尝试它仍然有效。