2016-07-26 1 views
0

C#의 Windows Mobile 용 간단한 메시징 시스템을 수행하고 있습니다. 이 응용 프로그램은 웹 서비스 통신을 사용하여 간단한 텍스트 메시지를 보내고받는 것으로 구성됩니다. 메시지 큐는 지속적이어야하며 웹 서비스와의 연결이 끊어 지거나 응용 프로그램이 중단되는 경우 데이터가 손실되지 않습니다.단일 프로세스에 대한 C#의 단순 지속 메시지 큐

나는 MSMQ, RabbitMQ, DotNetMQ에 대해 알고 있지만 장치에 설치해야하며 이것은 매우 간단한 장치이므로이 간단한 작업을 위해 각 모바일에 다른 도구를 설치하고 싶지 않습니다.

이미 파일에 메시지가있는 XML 직렬화 된 대기열을 작성하는 함수를 구현했으며이 파일에서 모든 시간을 읽고 씁니다.

이 문제를 해결하기 위해 더 좋은 아이디어를 주시면 감사하겠습니다. 감사합니다.

+0

Windows Mobile은 오랫동안 사용되지 않았습니다. Windows Phone 또는 Windows Mobile을 의미합니까? 그렇다면 푸시 알림 만 사용하는 것이 좋습니다. – EJoshuaS

+0

Windows Mobile 6.5! 예, 그들은 늙습니다! 그들은이 메시징 응용 프로그램과 같이 아주 소수의 작업에만 사용됩니다. –

답변

0

물론, SQLite을 사용하는 것이 더 좋습니다. 도움이되기를 바랍니다.

0

Windows Mobile에서 사용할 수있는 기능을 모르지만 두 가지 파일과 함께 기본 대기열 (일반 또는 동시, 앱에 따라 다름)을 사용해 볼 수 있습니다. 대기열에 포함 된 모든 항목을 하나의 "대기열 보관 대기"파일에 기록하고 대기열에 보관 된 모든 항목을 다른 대기열에 보관 대기중인 파일에 작성합니다. 이 두 파일은 항상 큐를 복원 할 수있는 충분한 정보를 제공 할 수 있으며 큐를 완전히 다시 작성하거나 전체적으로 직렬화 할 필요가 없습니다. 그것은 손으로 구현해야합니다.

대기열 해제에 대해 : 예를 들어, "1", "2", "3"의 대기열이 있다고 가정 해 봅니다. 이제 다음 메시지 ("첫 번째 메시지")를 보내려고합니다. 나는 "대기열에서 시작하는 제거"행을 "대기열에서 제외 된 로그"에 추가 한 다음 대기열 객체에서 "하나"를 제거하고 전송할 곳으로 보냅니다. 전송 될 때, "대기열에서 완료된 제거"를 "대기열에서 제외"로그에 추가합니다. 이제는 "대기열에서 제거 시작 중 하나 - 대기열에서 제거 완료"라는 줄이 내 로그 파일에 있습니다.

내가 언제 충돌하는지는 중요하지 않습니다. 항상 큐 객체의 상태를 복원 할 수 있습니다 (적어도 지금은이 과정에서 어떤 논리 오류도 볼 수 없습니다). 그래서 imho는 까다 롭지는 않지만 여전히 ... 일부 코드는 코딩해야합니다. 그리고 그것은 몇 페이지의 코드 일 것입니다.

+0

또한이 두 파일은 일부 "충돌 지속"방식으로 때때로 청소해야합니다. 예를 들어, "Dequeue log"가 1000 개의 메시지보다 길면 새로운 "Dequeue log 2"를 작성한 다음 이전 메시지를 삭제하십시오. 메시지를 삭제하기 전에 제거되어야하는 메시지와 관련하여 "큐 삽입 로그"와 동일합니다. –

+0

답변 해 주셔서 감사합니다. 실제로 귀하의 아이디어와 비슷한 것을하고 있습니다.내 메시지가 SOAP 웹 서비스에 의해 XML로 검색되므로 필자는 파일에 메시지를 추가하는 것입니다. 즉, enqueue와 getTheFirstElement는 쉽습니다. 까다로운 부분은 dequeue입니다. –

+0

@MariaSilvia는 디큐 프로세스에 대한 제 생각으로 제 대답을 편집했습니다. 내가 아는 한 그것이 내가했던 방식이다. (나는 백엔드 시스템을 위해 커스텀 persistent .Net MQ를 구현해야만했다.) –

0

MSMQ은 Windows Mobile 6.5 장치에서 기본적으로 지원됩니다. BTW : WM65 기반 장치를 제공하는 산업 분야의 많은 공급 업체가 여전히 있으므로 아직 구식이 아닙니다.

Windows Mobile (CE) 기반 MSMQ는 지속적이고 사용하기 쉽습니다. 일반적으로 장치의 프로세스 간 통신 또는 클라이언트 서버 통신 ('서버'에 MSMQ가 설치되어 있어야 함)에 사용됩니다.

따라서 주 스레드는 MSMQ를 만들고 프로세스에서 하나의 스레드가 MSMQ를 채우고 다른 스레드는 '엿보기'를 표시하고 전송이 성공한 후 동일한 MSMQ에서 메시지를 대기열에서 제외합니다. 간단한 예를 보려면 here을 참조하십시오.

+0

설치하지 않고 장치에서 메시지 큐를 만들려고했지만 예외가 발생했습니다. "이 컴퓨터에 메시지 큐가 설치되지 않았습니다." –

+0

아마 당신은 잘못된 msmq 구현을 시도 했습니까? 샘플 코드는 https://github.com/hjgode/rdmInject/blob/master/RDM_msg_queue/msgqueue.cs에서 확인하십시오. 이것은 rdm_inject dll 코드에 의해 게시 된 msg를 처리하는 코드입니다. BTW : 이미 WM 시작시 PowerNotifications 또는 PlugNPlay 장치 변경 등을 볼 수 있도록 많은 MSMQ 구현을 실행하고 있습니다. github에서 호스팅되는 프로젝트 (예 : https://github.com/hjgode/logging_ce/blob)에서 이러한 여러 가지 기능을 사용했습니다. /master/PowerMsgLog/PowerMsgQueue.cpp 및이 logging_ce 폴더의 thers) – josef