WCF - pojedynczy serwis z kilkoma implementacjami kontraktów

0

Witam,

Zastanawiamy się nad refaktoryzacją istniejącego projektu REST API w WCF. Obecna architektura nie jest już wystarczająca na nowe potrzeby, dlatego konieczne jest podzeilenie na moduły.
Z tego co mi wiadomo to pojedyncza usługa (rozumiana jako pojedynczy plik .svc) może posiadać tylko jedną impelemntację interfejsu kontraktu (wiem że interfejsów mże być wiele, ale implementacje wszytskich musza być zawarte w jednej klasie).

Ideą jest by w ramach istniejacego już serwisu WCF wydzielić bloki funkcjonalne (odpowiedzialne za poszczególne konteksty biznesowe aplikacji) i każdy z nich zaimplementować jako w osobnym projekcie (jako zwykł dll, niebędący usługą WCF) i dopiero w projekcie corowym spiąć je z finalną usługą poprzez dodanie jakiejś automatycznej rejestracji poprzezużyuwany Dependency Injector. Finalnie skończylibyśmy z kilkoma projektami zawierającymi interfejs+ implementacje modułów biznesowych + 1 projekt corowy "opakowywujący" te projekty w usługę WCF (interfejsy w modułach byłyby normalnie udekorowane atrybutami WCF).

Niestety ten prosty i względnie elegancki pomysł nie uda się z powodu opisanego w pierwszym akapicie. Pomysł żeby zrobić każdą implementacje jako pratial w też nie przejdzie bo podział na odrębne projekty jest koniecznością - odpada. Odrębny serwis WCF dla każdego modułu też odpada - zmiana ma być przeźroczysta dla istniejących systemuów, zresztą usług do przerobienia jest kilkanaście - powstałby ogromny bałagan -odpada.

Ktoś może spotkał się z podobnym problemem i udało się go rozwiązać ? Aha WCF musi zostać.

1

A czemu po prostu nie wydzielić logiki do oddzielnych modułów, a projekt WCF zostawić jako fasadę do nich? W sensie klasa implementująca serwis WCF nie robiłaby nic poza wywołaniem kodu z odpowiedniego modułu.

0

Problem polega na tym że wymagałoby to zmiany klasy core za każdym dodaniem nowych metod do modułu. Idea jest taka żeby core był niezależny od modułów a więc sytuacji musiałbym dodawać implementacje i call do zewnętrznej biblioteki bezpośrednio w klasie core.

0

W takim razie jak chcesz nową biznesową metodę udostępnić przez WCF? Musisz ją jakoś wystawić przecież, a z tego co rozumiem nie masz jakiegoś generycznego handlera, który przyjmuje dowolny request tylko każda usługa jest oddzielna, tak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1