c#
  • .net
  • soap
  • 2012-05-09 21 views 9 likes 
    9

    Muszę wysłać żądanie SOAP do adresu URL. Ale uważam to za trudniejsze niż myślałem.Wysłać żądanie SOAP, od czego zacząć?

    Żądanie że muszę wysłać to:

    string bla = "" + 
    "<?xml version='\"1.0\" encoding=\"UTF-8\"?>" + 
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
         "<soap:Body>" + 
          "<ns1:sendNotificationResponse" + 
           "xmlns=\"http://notification.services.adyen.com\"" + 
           "xmlns:ns2=\"http://common.services.adyen.com\">" + 
          "<notificationResponse>[accepted]</notificationResponse>" + 
          "</sendNotificationResponse>" + 
         "</soap:Body>" + 
        "</soap:Envelope>"; 
    

    Dostałem URL: https://ca-test.adyen.com/ca/services/Notification?wsdl

    Problemem jest to, że nie jestem pewien, jak iść dalej od tego miejsca . Czy mogę po prostu wysłać zapytanie do tego adresu URL? Czy najpierw muszę zaimportować WSDL?

    Znalazłem wiele przykładów w sieci, ale nie mogłem zrozumieć większości z nich. Niektóre z nich były nieaktualne, ponieważ nadal były używane: Microsoft.Web.Services3

    Krótko mówiąc, jestem trochę nieświadomy tego, co dokładnie muszę tu zrobić i jak. Po prostu chcę wysłać komunikat "SOAP" ...

    +3

    Czy próbowałeś dodać 'Service reference' lub' Web Reference' w swoim VS? –

    +0

    Wypróbuj ten link na temat tworzenia lub korzystania z usługi internetowej: http://www.kevingao.net/wcf-java-interop/wcf-client-and-wcf-service.html –

    +0

    @LB Nie, to wszystko naprawdę nowy dla mnie. Widzę "Dodaj odniesienie do usługi", ale nie "Dodaj odniesienia do sieci". Spróbuję najpierw dodać "Service Reference". – Vivendi

    Odpowiedz

    4

    Możesz to zrobić, dodając odwołanie do usługi do adresu URL punktu końcowego podanego w pytaniu. Następnie możesz wywołać metodę WWW tak, jak nazwałbyś normalną metodę, tuż przy obiekcie klienta. Krok po kroku poniżej:

    1. prawym przyciskiem myszy referencje, wybierz Add Reference usług
    2. Wprowadź adres URL, aby dodać odniesienie serwisowy
    3. W kodzie wystąpienia nowego klienta i używać jak poniżej:
    ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient(); 
    client.sendNotification(...); 
    

    Edit

    Bardziej szczegółowo patrząc na usługę sieciową, wygląda na to, że żądanie SOAP zawarte w pytaniu jest odpowiedzią, która zostanie odesłana przez adres url po wywołaniu metody - a nie prośbą, która zostanie wysłana do usługa internetowa do wywołania metody.

    3

    Czy nie byłoby łatwiej dodać odniesienie do usługi WWW w Visual Studio? Dostajesz klasy "stub", które pozwalają ci komunikować się z usługą sieciową przy użyciu normalnych klas i metod - nie musisz przejmować się wysyłanymi komunikatami SOAP ani tym bardziej.

    Aby dodać taką referencję, można wybrać pozycję menu kontekstowego "Dodaj odniesienie do usługi". W zależności od rodzaju usługi należy nacisnąć przycisk w lewym dolnym rogu okna dialogowego opisu usługi (w języku niemieckim nazywa się to "Erweitert", co oznacza "Rozszerzony" lub "Rozszerzony"). Następne okno dialogowe ma również przycisk w lewym dolnym rogu w sekcji "Zgodność", aby dodać "odniesienie do usług internetowych w stylu .NET 2.0".

    Jedna z dwóch powinna ci pomóc.

    Jeśli chcesz wysłać żądanie ręcznie, wyślesz żądanie POST do adresu URL usługi internetowej, dodając kod XML jako treść żądania.

    +0

    Dodałem WSDL jako odniesienie. Pokazał mi w oknie dialogowym, że mam jedną funkcję "sendNotification". Sądzę, że tego właśnie potrzebuję. Mam teraz "ServiceReference1" w "Service References". Sądzę, że to dobrze, prawda? --- Następną rzeczą, którą muszę zrobić, to użyć tego. Masz pomysł, jak to zrobić? --- ServiceReference1 service = new ServiceReference1(); --- Nie rób tego. – Vivendi

    +0

    Powinna istnieć teraz przestrzeń nazw 'ServiceReference1'. Więc jeśli wpiszesz 'ServiceReference1." I poczekasz, aż pojawi się okno uzupełniania kodu, zobaczysz kilka klas. Ten, którego potrzebujesz, powinien kończyć się słowem "Klient". Na przykład "Service1Client". –

    +0

    Jak Richard się dowiedział, wiersz powinien wyglądać tak: 'ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient()' –

    0

    Jeśli chodzi o "jak wysyłać wiadomości z mydłem": zależnie od użytego procotolu (http, jms, nawet smtp), komunikaty SOAP mogą być wysyłane do instanu nawet z linii poleceń, przez telnet, curl itp.

    W związku z tym pytaniem: przepraszam za ogólną odpowiedź, ale zależy to od używanego ws-framework.

    Jeśli chodzi o WSDL: Dokument WSDL działa jako umowa/podstawa do wdrożenia, więc w twoim przypadku (zakładając, że twój komunikat SOAP jest już ważny zgodnie ze schematem w WSDL), wyraźne użycie WSDL nie jest naprawdę konieczne.

    Powiązane problemy