Projektowanie zdalnych interfejsów
Wraz z pojawieniem się rozproszonego modelu obiektowego składników, ważne jest, aby własny interfejs mógł być zdalnie dostępny, nawet jeśli zamierzasz używać go wyłącznie wewnątrz procesu.
MIDL to nie tylko sposób generowania plików nagłówków dla interfejsów. Jest to język programowania do komunikacji zdalnie, który umożliwia używanie interfejsów między granicami maszyny, procesu i wątku. Oznacza to, że przed udostępnieniem programu klientom należy zweryfikować zachowanie interfejsów zdefiniowanych w języku MIDL. Jeśli popełnisz błąd w języku IDL i interfejs nie jest poprawnie obsługiwany zdalnie, może to być trudne do naprawienia tego błędu. Albo musisz skorygować interfejs za pomocą nowego identyfikatora IID i pozostawić stary w celu zapewnienia zgodności z poprzednimi wersjami lub musisz przekonwertować każdego klienta i każdą maszynę serwera wszędzie w tym samym czasie.
Nawet jeśli interfejs nigdy nie będzie używany poza procesem, może być używany między wątkami. Najgorszy problem dla niesprawdzonego pliku IDL może wystąpić w przypadku serwerów działających w procesie, które nie obsługują wielu jednowątkowych apartamentów ). Serwer, który nie określa modelu wątkowego, jest niejawnie jednowątkowy. Wszystko oznaczone jako jedno-wątkowe jest przypisywane do wątku, który jako pierwszy wywołał funkcję CoInitialize lub CoInitializeEx. Jeśli jakiś inny wątek był tym, który aktywował obiekt, wszystkie interfejsy na tym serwerze jednowątkowym muszą być przekierowane z powrotem do wątku aktywującego, co może spowodować zwrócenie REGDB_E_IIDNOTREG w odpowiedzi na wywołanie QueryInterface). Jeśli nie możesz z całą pewnością stwierdzić, że interfejs działa w ramach tego samego procesu i zawsze będzie wywoływany w tym samym wątku, prędzej czy później zostanie zdalnie wywołany.
Na koniec jako projektant interfejsu należy rozważyć sposób używania interfejsu przez aplikacje klienckie. Dwie kwestie, razem, określają, czy interfejs będzie wydajny w granicach procesów i maszyn: częstotliwość wywołań metod przez granicę interfejsu i ilość danych, które mają być przesyłane w danym wywołaniu metody. Mimo że COM sprawia, że wywołania między procesami i między sieciami są niewidoczne dla programów, nie może uczynić wywołań o wysokiej częstotliwości i wysokiej przepustowości wydajnymi w przestrzeniach adresowych. W niektórych przypadkach bardziej odpowiednie jest projektowanie interfejsów, które będą zwykle implementowane tylko jako serwery przetwarzania, podczas gdy inne interfejsy są bardziej odpowiednie do użytku zdalnego.