2008-11-19 12 views

Odpowiedz

5

Jaką wersję Visual Studio używasz?

VS2008 zawiera funkcjonalność narzędzia svcutil. Aby wygenerować proxy, kliknij Eksplorator rozwiązań i wybierz "Dodaj referencje serwisowe", możesz wpisać adres URL serwera, nadać nazwę przestrzeni nazwiskom i zacząć.

Być może zechcesz rozwinąć swoje pytanie, aby podać więcej szczegółów na temat tego, co chcesz osiągnąć.

4

Narzędzie svcutil.exe (i równoważne funkcje w VS2008) są zwykle używane w ten sposób: -

wskazywać go w opisie usługi (dokument WSDL) i generuje kod po stronie klienta i config pomóc klientowi, który może komunikować się z usługami opisanymi w WSDL. Narzędzia mogą również wykonywać inne czynności, ale do tego są najczęściej używane. Zakładam, że to właśnie jest użycie svcutil.exe, do którego się odwołujesz.

Więc jeśli masz istniejącą usługę, być może napisaną przy użyciu innego stosu (nie WCF), użycie svcutil uprości twoje życie, inaczej byłoby inaczej. Pamiętaj jednak, że wygenerowany kod i konfiguracja mogły zostać napisane przez ciebie. Zwykle konfiguracja wygląda na pełną, ponieważ narzędzie umieszcza tam wszystkie ustawienia domyślne. Jeśli sam napisałeś konfigurację, prawdopodobnie możesz pominąć większość z nich.

Jeśli sam piszesz klienta i usługi, używając WCF, prawie nie ma powodu, dla którego użyłbyś svcutil.exe. Po zdefiniowaniu [ServiceContract] możesz użyć tej samej definicji zarówno w kliencie, jak i usłudze. Podczas tworzenia pliku konfiguracyjnego usługi jest to proste zadanie, aby na jego podstawie utworzyć plik konfiguracyjny klienta - większość zawartości jest taka sama.

Podsumowując, nie ma podstaw, aby zrozumieć, co właściwie oznacza cały kod/konfiguracja wygenerowana przez svcutil.exe. Wtedy będziesz w stanie pracować bez niego.

7

Jednym ze sposobów na zbudowanie klienta WCF bez użycia svcutil.exe jest użycie ChannelFactory. To, co musisz zrobić, to zbudować interfejs usługi WCF w oddzielnym zestawie od implementacji usługi. Następnie można odwołać się do tego zestawu interfejsu zarówno od klienta, jak i od usługi.

Gdy masz odniesienia, można użyć następującego kodu, aby utworzyć klienta WCF:

var factory = new ChannelFactory<IMyWcfService>(); 
var wcfClient = factory.CreateChannel(); 
bool closedSuccessfully = false; 

try 
{ 
    // Now you can make calls on the wcfClient object 
    ((ICommunicationObject)wcfClient).Close(); 
    closedSuccessfully = true; 
} 
finally 
{ 
    if (!closedSuccessfully) 
    { 
     ((ICommunicationObject)wcfClient).Abort(); 
    } 
} 

Uwaga rutynowego czyszczenia. Nie można użyć instrukcji using w celu wyczyszczenia zmiennej wcfClient. Jeśli to zrobisz, a obiekt jest w stanie błędu, otrzymasz wyjątek wygenerowany, gdy blok using() wykracza poza zakres i Dispose() zostanie wykonane na zmiennej wcfClient. Zobacz Jesse Ezell's blog

+0

+1. Wygląda na to, czego szukałem. Czy ChannelFactory odczyta wszystkie ustawienia z App.config jak normalna klasa proxy? –

+0

Uwaga: Wywołanie CreateChannel zwróci coś, co implementuje IMyWcfService. Nie będzie to miało metod Zamknij i Przerwij - musisz zadzwonić do nich bezpośrednio w fabryce –

+0

Tak, ChannelFactory odczyta ustawienia z app.config. Sądzę, że jedno z przeciążeń pozwala ci określić, której konfiguracji klienta użyć po nazwie. Możesz także zrobić wszystko w kodzie, przekazując wiązanie kanału do użycia i całkowicie zignorować konfigurację. Jeśli chodzi o zamykanie proxy klienta (IMyWcfService), można go rzucić do ICommunicationObject i wywołać Close() na tym obiekcie. –

Powiązane problemy