konto usunięte

Temat: Wrapper dla klienta serwisu svc

Mój contract zapewnia transmisję trzech elementów:
- tokena transmisji (zwracany przy requeście)
- obiektu przenoszącego dane
- listy obiektów przenoszących dane

Problem jest taki, że niewiele można powiedzieć o automatycznie wygenerowanych klasach obsługi web service, przez co ciężko zbudować dla nich wrappera. A pisanie w każdym wywołaniu tego samego (try, catch, if CommunicationOk, if Error then LogError etc) jest irytujące no i ciężkie do późniejszych zmian/adaptacji.

Macie jakieś pomysły jak napisać wrapper dla komunikacji przez web service taki aby:
1) automatyzował tworzenie niezbędnych do komunikacji obiektów
2) zapewniał obsługę błędów
3) był rozsądnie szybki w implementacji i wygodny w przekazywaniu danych do następnych warstw?
Sławek Lis

Sławek Lis informatyk,
matematyk

Temat: Wrapper dla klienta serwisu svc

ad2) nie wiem czy dobrze zrozumiałem,
ale moze można by dać ogólne pole błedu przyjmujące wartość 0 lub 1
bez względu na to taki bład jest oraz pole string z komunikatem błeduSławek Lis edytował(a) ten post dnia 12.11.08 o godzinie 12:46

konto usunięte

Temat: Wrapper dla klienta serwisu svc

Sławek Lis:
ad2) nie wiem czy dobrze zrozumiałem,
ale moze można by dać ogólne pole błedu przyjmujące wartość 0 lub 1
bez względu na to taki bład jest oraz pole string z komunikatem błeduSławek Lis edytował(a) ten post dnia 12.11.08 o godzinie 12:46

Chciałbym bezproblemowo obsługiwać wyjątki jak i błędy komunikacyjne. Nie chcę wiązać się do jednego sposobu i umożliwić sobie zmianę w trakcie projektu, dlatego chcę wrappera.
Jarosław S.

Jarosław S. Kierownik Działu
Rozwoju Aplikacji
.NET, ITeam SA

Temat: Wrapper dla klienta serwisu svc

Sebastian Pienio:
Problem jest taki, że niewiele można powiedzieć o automatycznie
wygenerowanych klasach obsługi web service, przez co ciężko zbudować dla nich wrappera. A pisanie w każdym wywołaniu tego
samego (try, catch, if CommunicationOk, if Error then LogError
etc) jest irytujące no i ciężkie do późniejszych zmian/adaptacji.
Jeśli mówimy o usługach WCF, możliwości są tutaj przynajmniej dwie:
1. Stworzenie własnej (abstrakcyjnej) klasy bazowej dziedziczącej po ClientBase<T>.
2. Stworzenie własnej (abstrakcyjnej) klasy bazowej zawierającej obiekt implementujący interfejs IChannel, wykorzystywany do komunikacji z usługą.

W obydwu przypadkach do definicji "konkretnego" klienta, musi on mieć dostęp do deklaracji interfejsu i klas definiująch kontrakt usługi (albo poprzez referencję do odpowiedniej assembly, albo poprzez skopiowanie / referencję plików źródłowych).

Do każdej z tych klas możesz dodać np. standardową metodę obsługi błędów (w poniższym przykładzie jest to HandleException).
Nie uwolni to Ciebie od stosownego opakowania każdego wywołania metody w "konkretnej" implementacji klasy-klienta, jednak będzie to stosunkowo prosty kawałek kodu:

try
{
base.Channel.DoSomethingFunny(int funnyParameter);
}
catch (Exception ex)
{
base.HandleException(ex);
}


Utworzona klasa bazowa powinna także implementować interfejs IDisposable uwzględniając specyficzne dla WCF-a wymagania (czyli wywołanie Close lub Abort na kanale w zależności od jego stanu).Jarosław S. edytował(a) ten post dnia 12.11.08 o godzinie 23:21

konto usunięte

Temat: Wrapper dla klienta serwisu svc

Jarosław S.:
Jeśli mówimy o usługach WCF, możliwości są tutaj przynajmniej dwie:
1. Stworzenie własnej (abstrakcyjnej) klasy bazowej dziedziczącej po ClientBase<T>.
2. Stworzenie własnej (abstrakcyjnej) klasy bazowej zawierającej obiekt implementujący interfejs IChannel, wykorzystywany do komunikacji z usługą.

W obydwu przypadkach do definicji "konkretnego" klienta, musi on mieć dostęp do deklaracji interfejsu i klas definiująch kontrakt usługi (albo poprzez referencję do odpowiedniej assembly, albo poprzez skopiowanie / referencję plików źródłowych).

Dzięki za sugestie, pomogły mi, chociaż bezpośrednio nie mogłem ich wykorzystać. Wrapper dla svc pod silverlight (to dodatkowe wymaganie) nie dziedziczy po ClientBase, dodatkowo nie mogę zrobić takiej referencji (znacząco zwiększa to paczkę XAP).

Użyłem generics i reflection kopiując ogólnie to, co "normalnie" robisz przez svcutil + rozszerzenie ClientBase. Dzięki!
Jarosław S.

Jarosław S. Kierownik Działu
Rozwoju Aplikacji
.NET, ITeam SA

Temat: Wrapper dla klienta serwisu svc

Sebastian Pienio:
Dzięki za sugestie, pomogły mi, chociaż bezpośrednio nie mogłem ich wykorzystać. Wrapper dla svc pod silverlight (to dodatkowe wymaganie) nie dziedziczy po ClientBase, dodatkowo nie
mogę zrobić takiej referencji (znacząco zwiększa to paczkę XAP).

To fakt - nie zorientowałem się, że problem dotyczy klienta w Silverlight.

Następna dyskusja:

Crystal Reports dla Asp.net




Wyślij zaproszenie do