2009-08-25 13 views
8

Czy istnieje możliwość zainicjowania usługi WebService.C# Jak zainicjować WebService

Poszukuję metody, która działa tylko podczas pierwszego połączenia z usługą WebService. Czy jest coś takiego w .Net?

+5

Czy to znaczy po raz pierwszy, że dany „klient” wywołuje Web Service w ramach sesji, pierwsza czas, w którym usługa sieciowa jest kiedykolwiek wywoływana, lub po raz pierwszy jest wywoływana, ponieważ usługa IIS ostatnio została poddana recyklingowi/uruchomiona pula aplikacji? – Rob

Odpowiedz

17

Opierając się na moim komentarzu do Twojego pytania ....

Jeśli potrzebujesz „inicjalizacji” Po raz pierwszy dany klient łączy się z usługą sieci Web: Masz „Initialize” metodę zwraca token, taki jak Guid, który jest następnie wymagany przy każdym wywołaniu do rzeczywistej metody "działaj" twojej usługi internetowej. Następnie możesz upewnić się, że dla tego klienta usługa jest zawsze inicjowana.

Jeśli potrzebujesz go po raz pierwszy serwis internetowy jest zawsze o nazwie: dodać trochę kodu do swojej służby, jako prywatny sposób, że nazywa się u góry każdej metody publicznej. W jego ramach należy sprawdzić, czy coś jest nie tak, jak wpis rejestru, plik, rekord bazy danych lub inna trwała wartość. Jeśli nie istnieje, przeprowadź inicjalizację, a następnie utwórz "coś".

Jeśli potrzebujesz go na pierwsze wezwanie od IIS ostatni recyklingowi/rozpoczął puli aplikacji: mieć statyczny konstruktora dla klasy tak, że kiedy to pierwsza instancja statycznych tras konstruktora i wykonuje swoją inicjalizacji.

0

Cóż, nie ma odpowiednika inicjalizacji J2EE, jeśli tego właśnie szukasz ... Jednak każda aplikacja internetowa jest hostowana w domenie aplikacji. Co jakiś czas aplikacja może zostać poddana recyklingowi i można utworzyć nową domenę aplikacji ...

4

Po utworzeniu aplikacji WebService w Visual Studio domyślnie zostanie dodana klasa o nazwie "Service". Kiedy spojrzysz na kod tej klasy (Service.cs), zobaczysz konstruktora ("public Service()") z dwoma liniami komentarza. Możesz tutaj umieścić kod inicjalizacyjny lub zadzwonić do prywatnej metody zdefiniowanej w klasie Service. Ten konstruktor będzie wywoływany tylko wtedy, gdy klient nawiąże pierwsze połączenie z dowolnym WebMethod w klasie Service.

5

Jeśli próbujesz zainicjować zasób używany przez usługę WWW i chcesz go zainicjować tylko raz dla każdej aplikacji, możesz użyć zdarzenia Application_Start w pliku Global.asax. Należy pamiętać, że usługi IIS będą odtwarzać pulę aplikacji, gdy pula aplikacji będzie zbyt duża.

Jeśli potrzebujesz zainicjować zmienną na poziomie klasy, możesz to zrobić w konstruktorze usługi internetowej. Polecam przeciw temu, ponieważ twoja usługa sieciowa powinna być bezpaństwowcem. Jeśli chcesz zainicjować statyczny zasób raz w swojej usłudze internetowej, możesz użyć statycznego konstruktora.

Jeśli potrzebujesz pojedynczego zasobu, który jest dostępny tylko w całej aplikacji, poleciłbym zajrzeć do wzorca singleton.

0

Można użyć Application_Start w global.asax, to będzie działać raz jeśli usługa wewnątrz projektu nazywa