통신용 MQTT가 필요한 .NET IoT 프로젝트를 빌드 중입니다. 브로커의 경우 GnatMQ을 사용하고 클라이언트의 경우 MqttDotNet (모바일 호환성)을 사용합니다. 클라이언트 라이브러리는 메시지를 올바르게 작성, 연결 및 전송하지만 클라이언트의 PublishArrivedDelegate (메시지 수신 이벤트)이 트리거 될 때마다 오류가 발생합니다.MqttDotNet의 ProcessReceivedMessage 오류
표준 수신 메시지뿐만 아니라 보관 된 메시지에서도 오류가 발생합니다. MqttDotNet 오류 로그는 here입니다.
이 오류가 라인 (91)에 QoSManager.cs에서 캡처 한 것 같다 :
else if (mess.QualityOfService == QoS.OnceAndOnceOnly)
{
_responses.Add(mess.MessageID, new MqttPubrelMessage(mess.MessageID));
}
참고 : 나는없는 (있는 그대로) 원시 라이브러리를 사용하고 추가 된 코드.
누구든지이 라이브러리를 사용해 본 사람이 문제없이 제대로 작동하는지 확인할 수 있습니까? 그때까지, 나는 그것이 극단까지 디버깅하고 있다고 생각한다.
업데이트 1 : 오류 만의 QoS 레벨 2
요금으로 가입에 계속 2 오류가 지적했듯이, 해시 테이블에 추가되는 중복을 방지하기 위해 핸들을 추가로 방지 할 수있다 @hardillb에 의해. 그러나 이것이 실제 문제를 해결하지는 못합니다.
QOS 2를 사용하여 게시 및 구독 문제가 계속 발생합니다. 문제는 onClientPublishedArrived
이 메시지가 수신 될 때마다 정확히 3 번 트리거되고 메시지가 수신 될 때 정확하게 2 번 트리거된다는 점입니다. 이 문제를 해결하기 위해 HiveMQ으로 테스트 할 때 문제가 해결되었습니다. 브로커 GnatMQ을 사용할 때만 문제가 지속됩니다.
_responses 개체 란 무엇입니까? – hardillb
@hardillb Hashtable 인스턴스의 이름입니다. – Jnr
GnatMQ의 QOS2 구현이 깨져서 업데이트 된 것 같습니다. – hardillb