2011-08-15 18 views
5

Pracuję nad przeniesieniem aplikacji klient/serwer do .NET. Aktualna wersja serwera C ma jeden plik wykonywalny dla procesu (usługa systemu Windows), który nasłuchuje na połączenia z gniazdami. Kiedy słuchacz akceptuje połączenie przez gniazdo, uruchamia nowy proces obsługi tego połączenia. Aplikacja obsługi jest osobnym plikiem wykonywalnym.Przekazywanie gniazda do nowej AppDomain

W wersji .NET tej aplikacji chciałbym mieć jeden plik wykonywalny/proces. Słuchacz powinien utworzyć nową AppDomain dla każdego połączenia (aby odizolować "proces roboczy" przypisany do każdego klienta). Jak przekazać gniazdo z domeny aplikacji odbiornika do domeny aplikacji robotniczej?

Dzięki!

+0

W zależności od izolacji możesz użyć funkcji GetData i SetData w odpowiednich domenach, ale konieczne może być przesłanie obiektów Marshal. Czy próbowałeś już czegoś? –

+0

Myślę, że właśnie znalazłem odpowiedź na moje własne pytanie. Można użyć metody DuplicateAndClose, nawet jeśli nie przekazuję gniazda do oddzielnego procesu. Słuchacz może po prostu przekazać swój własny identyfikator procesu. [link] (http://blogs.msdn.com/b/malarch/archive/2005/12/14/503884.aspx) –

+0

Fajnie, miej nadzieję, że działa poprawnie; jeśli tak, powinieneś odpowiedzieć na własne pytanie i zaakceptować je. –

Odpowiedz

4

Myślę, że właśnie znalazłem odpowiedź na moje własne pytanie. Można użyć metody DuplicateAndClose, nawet jeśli nie przekazuję gniazda do oddzielnego procesu. Słuchacz może po prostu przekazać swój własny ID procesu do DuplicateAndClose.

Rozwiązanie opisane jest tutaj: http://blogs.msdn.com/b/malarch/archive/2005/12/14/503884.aspx

Działa to także wtedy, gdy chcesz przekazać gniazdo wyłączyć do odrębnego procesu.