Aktualnie pracuję nad niektórymi sieciami usług internetowych (serwisy ASP.NET 3.5). Moja warstwa biznesowa jest podobna dla wszystkich usług - oznacza to, że mam te same struktury z tymi samymi polami w każdej usłudze.
Ale kiedy przekazuję te struktury między usługami, za każdym razem, gdy potrzebuję przekształcenia z typu globalnego na typ lokalny, na przykład:
Jeśli mam metodę zwracającą instancję struct.
[WebMethod]
public MyObject MyMethod () {
return new MyObject();
}
Kiedy wołam to z usługi klienta, piszę coś takiego:
OuterService proxy = new OuterService();
global::MyObject obj = proxy.MyMethod();
Gdzie OuterService jest instancją klasy generowanej przez wsdl.exe. A następnie, aby przekazać go do następnej usługi, muszę przetransformować ją z pola typu globalnego na typ lokalny według pola i właściwości według właściwości.
Moje pytanie brzmi:
Czy istnieje jakieś eleganckie rozwiązanie do przekazywania tych obiektów bez transformacji na każdym poziomie?
Myślałem o stworzeniu uniwersalnej warstwy biznesowejdla wszystkich usług sieciowych (które na przykład mogą być zadeklarowane jako usługa sieciowa), ale żeby to zrobić, muszę zmienić zbyt wiele rzeczy i myślę, że musi być łatwiejsze rozwiązanie tego, zapewnione przez framework.
Odpowiedzi:
0 dla odpowiedzi № 1Wystarczy użyć "Dodaj odniesienie do usługi". Domyślnie współużytkuje typy znajdujące się w złożeniach, do których odwołuje się twój projekt. Wystarczy dodać odniesienie do zestawu zawierającego typy, użyć "Dodaj odniesienie do usługi" lub "Zaktualizuj referencję serwisową" i powinieneś wszystko ustawić.
0 dla odpowiedzi nr 2
Możesz domyślnie udostępniać typy na granicach usług sieciowych - ale istnieją pewne obejścia, takie jak ten artykuł pokazuje
Mam nadzieję że to pomoże