使用SipSorcery进行故障转移订阅

时间:2014-04-30 13:03:20

标签: c# sip

如果您的TCP连接在初始订阅的到期计时器内死亡,如何使用SipSorcery创建新订阅? 现在写我已经有一个到期计时器在运行,当它过去时,我正在检查连接是否建立如下:

while (!tcpChannel.IsConnectionEstablished(myRemoteEndpoint))
{
    //... using same from tag, but creating new call id saved as SIPRequest _request...
    System.Threading.Thread.Sleep(1000 * 60);
    tcpChannel.Send(myRemoteEndpoint, Encoding.UTF8.GetBytes(_request.ToString());
}

想法是等待60秒,然后尝试向服务器发送新的SUBSCRIBE,检查连接是否建立,如果60秒后没有再次运行,直到连接建立。

但是.IsConnectionEstablished对于这个目的来说似乎有点不可靠......就像while循环阻塞了某些东西。我可以看到我的SUBSCRIBE请求已被发送,但我没有收到该请求的任何回复。

任何想法都是适用的。

1 个答案:

答案 0 :(得分:1)

您不应该进行IsConnectionEstablished检查。当你调用tcpChannel.Send时,它将负责建立一个到所需端点的新TCP连接(如果没有。)

如果您重复发送相同的请求而不更新所需的标头,例如CSeq,Via branchid,Call-ID&,那么为什么您没有收到对后续SUBSCRIBE请求的响应。从标签开始,它可能会被标记为重复请求。

此外,您可能需要查看SIPSorcery.SIP.App.SIPNotifierClient,因为它旨在维护SIP服务器的订阅。