ASP.NET MVC i WebService

20 września 2009, 22:04

KomentarzeKomentarze: 2 KategorieKategorie: asp.netmvc

W obecnym projekcie nad którym pracuję potrzebuję szybko stworzyć kilka WebSerwisów, które będą rozmawiać z aplikacjami zewnętrznymi poprzez protokół SOAP.

Pomyślałem, że skorzystam ze standardowej funkcjonalności dostępnej z poziomu ASP.NET. Niestety na obecną chwilę ASP.NET MVC nie posiada natywnego wsparcia dla tworzenia webserwisów.

O tworzeniu samych webserwisów nie będę się rozpisywał. Aby umożliwić działanie webserwisów poprzez pliki ASMX w aplikacji MVC w sumie nie trzeba nic robić. Dobrze jednak jest powiedzieć silnikowi MVC, aby ignorował żądania dla naszych webserwisów, dzięki czemu ich obsługą zajmie się już bezpośrednio sam IIS. Silnik MVC nie będzie się już do tego dotykał.

Wystarczy tylko zdefiniować odpowiednią regułę ignorującą w tabeli routingu:

   1:   
   2:  routes.IgnoreRoute("{webservices}.asmx/{*pathInfo}");

To w sumie już wszystko, ale po uruchomieniu okazało się, że webserwis nie działa. Dostałem wyjątek iż obiekt skojarzony z plikiem ASMX nie może być odnaleziony.

Przeniosłem więc klasę definiującą webserwis do zewnętrznego projektu, gdzie trzymam wszystkie swoje pozostałe klasy. W projekcie webowym mam tylko same widoki (ASPX,ASCX), zaś plik ASMX  wrzuciłem do katalogu API (tak dla porządku), który utworzyłem w głównym folderze aplikacji webowej.

W pliku ASMX jest tylko jedna linia kodu:

   1:  <%@ WebService Language="C#" Class="App.WebServices.Test" %>

Powyższa linia oznacza, że ten webserwis definuje obiekt Test w przestrzeni nazw App.Webservices.

Wywoływanie takich webserwisów odbywa się tak samo jak w standardowej aplikacji asp.net:

   1:  http://localhost/api/test.asmx

Dlaczego przyjąłem takie rozwiązanie? Potrzebowałem czegoś na szybko, dzięki czemu otrzymam możliwość wystawienia API poprzez SOAPa. Nie mam obecnie czasu na szukanie innego rozwiązania. No, chyba, że ktoś ma jakiś błyskotliwy pomysł, w miarę szybki do zaimplementowania, który bardziej przystaje do modelu aplikacji MVC.

Jeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.

Gravatar
matma
2009-09-25 14:48

Zależy co chcesz zrobić dokładnie - ale możesz pomyśleć nad wykorzystaniem REST na przykład, Nate Kohari popełnił coś takiego na szybko: http://kohari.org/2009/08/10/siesta-painless-rest-via-asp-net-mvc/ ale są też inne - Phil opisał to tutaj: http://haacked.com/archive/2009/08/17/rest-for-mvc.aspx

Aczkolwiek jeżeli działa Ci asmx i soap, to po co to ruszać ;)

Gravatar
dario-g
2009-09-25 15:04

Dokładnie tak. Potrzeba mi było właśnie SOAPa, więc asmxy były najszybsze do stworzenia i wykorzystania. :)

Przykład Neta widziałem :)

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

Te pola zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.