Web Service z Umbraco wariant pierwszy

Posted on

programming1

Witam

Dzisiaj będzie wpis o Umbraco. Pokażę jak za pomocą Visual Studio 2010 Web dodać usługę sieciową (web service) do naszego portalu opartego o Umbraco, wyświetlającą pochodne strony głównej.

Na początku tworzymy nowy projekt MVC4 w Visual Studio. Project template wybieramy „Empty” a następnie kasujemy wszystko poza referencjami (References) i właściwościami (Properties).

Kolejnym krokiem jest dodanie naszego katalogu z Umbraco (zaznaczamy zawartość katalogu i przeciągamy ją do Visual Studio na nazwę naszego projektu). Gdy Visual Studio zapyta o zastąpienie plików klikamy „NIE”.

Następnie dodajemy nasz Web Service. Klikamy prawym przyciskiem na nazwę projektu a następnie add new item. Z listy wybieramy Web Service (na samym dole) i nadajemy mu nazwę. Ja zostawiłem standardową – „webservice1”, by było nam łatwiej.

Zmieniamy dziedziczenie z System.Web.Services.WebService na Umbraco.Web.WebApi.UmbracoApiController. Aby Visual Studio widziało naszą klasę, po której dziedziczymy, dodajemy Reference i z katalogu „bin” naszego Umbraco dodajemy Umbraco.dll oraz Umbraco.Core.dll a także, cms.dll i businesslogic.dll. Następnie zmieniamy nazwę naszej klasy tak by na jej końcu znajdowało się słowo Controller – robimy tak, by aplikacja się uruchomiła i była zgodna z konwencją przyjętą przez Umbraco! Kolejnym krokiem jest zmiana nazwa w samym pliku usługi sieciowej czyli pliku asmx.  W tym celu klikamy prawym przyciskiem myszy na nazwie pliku i wybieramy opcję open with. Z menu wybieramy „Web Service Editor” i zmieniamy nazwę klasy tak by zgadzała się z naszą nową nazwą klasy zawierającą string „Controller”.

Dodajemy sekcję odwołania do naszych referencji (using) teraz lub po wpisaniu kodu, by doprowadzić aplikację do prawidłowego działania :

using Umbraco.Web;
using umbraco.cms.businesslogic.web;

Dodajemy kod

[WebMethod]
public List<string> Umbraco()
{
Document doc = new Document(1047); // w moim przypadku taki był numer głównego typu dokumentu czyli home page - można to sprawdzić w Umbraco, dodając odpowiedni komponent do strony w Umbraco, zczytać numer strony z działającej instancji strony i usunąć komponent.
if (doc.HasChildren)
{
Document[] children = doc.Children;
List<string> result = new List<string>();
int i = 0;

foreach (Document childDoc in children)
{
result.Add(childDoc.Text);

//Response.Write(childDoc.Text);
}
return result;
}
return null;
}

Po zapisaniu kodu uruchamiamy projekt i po wyświetleniu się instancji naszego Umbraco, wpisujemy slash i podajemy nazwę naszego Web Service’u czyli w moim przypadku jest to : http://localhost:52124/webservice1.asmx

Klikamy w nazwę naszego webservicu i wyświetli nam się opcja Invoke, którą wywołujemy naszą metodę Umbraco(). Po jej wywołaniu zobaczymy listę typów dokumentów jaką stworzyliśmy w naszym Umbraco. Należy tutaj wspomnieć, że dostęp do funckji Umbraco mamy dzięki dziedziczeniu po po klasie Umbraco. W celu przećwiczenia lub zapoznania się z innymi funkcjami Umbraco, do których możemy mieć dostęp z poziomu Visual Studio odsyłam do strony http://our.umbraco.org/wiki/reference/

Całość kodu prezentuje się następująco :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Umbraco.Web;
using umbraco.cms.businesslogic.web;

namespace UmbracoTest
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

public class WebService1Controller : Umbraco.Web.WebApi.UmbracoApiController
{
[WebMethod]
public List<string> Umbraco()
{
Document doc = new Document(1047);
if (doc.HasChildren)
{
Document[] children = doc.Children;
List<string> result = new List<string>();
int i = 0;

foreach (Document childDoc in children)
{
result.Add(childDoc.Text);

//Response.Write(childDoc.Text);
}
return result;
}
return null;
}
}
}

Zalety rozwiązania :

– Szybkie rozwiązanie programowe, wystarczy, że zwrócimy stringa

Wady :

– Musimy łączyć Umbraco z Visual Studio

– Zajmuje sporo czasu


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *