2012-08-28 2 views
0

클라이언트에 XMPP 메시지를 보내기 위해 jabber-net 객체를 사용해야하는 webservice가 있습니다.ASP.NET Webgarden 공유 정적 객체

(인쇄를 처리하기위한 것 : 웹 서비스에 인쇄해야하는 것이 있으면 인쇄 작업 유형 및 URL과 함께 프린터에 연결된 특정 컴퓨터에서 실행중인 Windows Forms 클라이언트로 XMPP 메시지를 보냅니다. 클라이언트는 데이터를 다운로드하여 프린터로 보냅니다.이 통신 채널은 서랍 열기, 칩 및 핀 장치와의 통화 등과 같은 다른 POS 기능에도 사용되므로 인쇄 대안이 도움이되지 않습니다.

나는 XMPP 서버에 로그인 한 다음 메시지를 보낼 수있는 jabber-net 객체의 인스턴스를 포함하는 정적 객체를 가지고 있습니다.

이것은 단일 스레드로 작동합니다. Webservice를 웹 가든으로 변환하여 하나 이상의 스레드에서 작동 할 수있는 것처럼, 각 스레드가 jabber-net 객체의 자체 인스턴스를 얻는 것처럼 보이므로 모든 XMPP 서버에 로그인하려고합니다. 한 번은 동일한 사용자로 간주되며, 이는 계속해서 쫓겨나는 것을 의미합니다.

질문 : 웹 가든의 모든 스레드간에 실시간 객체 (이벤트가 아닌 데이터를 직렬화 된 객체 만 처리 할 수 ​​있음)를 공유 할 수있는 방법이 있습니까? 그렇다면 가장 좋은 방법은 무엇입니까? ?

답변

0

웹 가든은 기본적으로 미니어처 웹 팜이므로 웹 팜에 포함될 솔루션을 찾아보고 동일한 해결책이 적용됩니다.

내가 세션과 웹 정원에 의해 붙 잡혔다, 나는 결국 프로세스 세션 공급자의 부족으로 전환 (나는 memcached를 기반 공급자를 사용하지만, SQL 서버 공급자 일 것이다). 비슷한 것을 할 수 있고 eac 스레드가 객체를 요청할 수있는 공유 공급자를 가질 수 있습니다.

이렇게해도 이벤트 문제는 해결되지 않습니다.이 방법으로 해결할 수 있을지 의심스럽고 단일 프로세스에서 모든 메시지를 처리하는 메시징 시스템 (예 : msmq)으로 전환해야 할 수도 있습니다.

+0

문제는 XMPP 기반 접근 방식이 내 메시지를 보내는 방법이었습니다. MSMQ는 "직접 연결이없는 컴퓨터의 큐에서 메시지를 읽을 수 없기 때문에"별로 도움이되지 않습니다. XMPP 서버에 고유 한 이름으로 개별적으로 로그인하는 모든 스레드와 함께 살 수 있다고 가정합니다. 로그인 할 수있는 이름을 입력하는 것은 재미있을 것입니다 ... 아마도 jabber-net에 대해 자세히 살펴보면됩니다. 밖으로 동일한 이름과 다른 자원과 그들에 로그인하는 방법에 대해 설명합니다. 좋아 –

+0

, 즉 라인을 추가하는 등의 응답으로 할 수 있습니다 _JabberClient.Resource = "MyServer를"+ Thread.CurrentThread.ManagedThreadId.ToString(); 모든 것을 분류했습니다 : 모든 스레드 행복하게 그들이 모든 메시지를 보낼 수 있습니다, 한 번에 모든 로그인 할 수 있으며, 서버에 모든 메시지/존재 알림 모두 수신합니다. –