Możesz udostępnić usługę w dwóch różnych punktach końcowych. SOAP można użyć powiązania, które obsługuje SOAP, np. basicHttpBinding, RESTful można użyć webHttpBinding. Zakładam, że twoja usługa REST będzie w JSON, w takim przypadku musisz skonfigurować dwa punkty końcowe za pomocą następującej konfiguracji zachowania
Innym sposobem jest ujawnienie dwóch różnych umów serwisowych i każdego z określoną konfiguracją. Może to generować niektóre duplikaty na poziomie kodu, jednak pod koniec dnia chcesz, aby działało.
Jak to wygląda, gdy mam .svc hostowany w IIS w jakimś katalogu wirtualnym, takim jak someserver / myvirtualdir / service.svc ? Jak mam uzyskać do niego dostęp?
Mówi, że moja umowa IEvents jest nieważna, gdy próbuję odwołać się do mojego interfejsu usługi: <nazwa usługi = „Zdarzenia”> <adres punktu końcowego = „json” powiązanie = „webHttpBinding” behawioracja = „jsonBehavior” umowa = „IEvent” />. Moje IEvents ma w interfejsie atrybut [ServiceContract], więc nie jestem pewien, dlaczego. </service>
PositiveGuy,
Mogę uzyskać localhost: 44652 / MyResource / json do pracy, ale nie mogę uzyskać identyfikatora do pracy localhost: 44652 / MyResource / 98 / json . Próbowałem dodać UriTemplate z „/ {id}”, próbowałem również „events / {id}, ale nie mogę go znaleźć, gdy próbuję uruchomić usługę. Tylko pierwsza działa, nie wiem, jak ją zdobyć do pracy
PositiveGuy
2
Jak może działać bez pliku fizycznego? Wydaje mi się, że dostaję błędy 404, czegoś mi brakuje
RoboJ1M
39
Ten post ma już bardzo dobrą odpowiedź przez „Community wiki”, a także polecam zajrzeć na blog internetowy Ricka Strahla, istnieje wiele dobrych postów na temat WCF Rest w ten sposób .
Użyłem obu, aby uzyskać tego rodzaju usługę MyService ... Następnie mogę użyć interfejsu REST z jQuery lub SOAP z Java.
Właściwie używam tylko Jsona lub Xml, ale oba są tutaj w celach demonstracyjnych. Są to żądania GET, aby uzyskać dane. Aby wstawić dane, użyłbym metody z atrybutami:
To jest do celów testowych. Tylko po to, aby sprawdzić, czy Twoje punkty końcowe działają. Czy spojrzałeś na SoapUI? soapui.org
Darrel Miller
@TuomasHietanen - Nie otrzymuję odpowiedzi typu JSON za pomocą zachowania webHttp, jednak za pomocą enableWebScript otrzymuję odpowiedź typu JSON. Umieściłem ResponseFormat jako WebMessageFormat.Json. Z drugiej strony nie mogę użyć URItemplate, jeśli użyję zachowania enableWebScript. Jakieś pomysły?
smile.al.d.way 20.10.11
1
@CoffeeAddict - Dlaczego warto korzystać z interfejsu? Po prostu mieć interfejs? Nigdy więcej nie użyjesz tego interfejsu. To jest prostsze.
Tuomas Hietanen,
25
Jeśli chcesz opracować tylko jedną usługę internetową i hostować ją w wielu różnych punktach końcowych (tj. SOAP + REST, z wyjściami XML, JSON, CSV, HTML). Powinieneś także rozważyć użycie ServiceStack, który zbudowałem właśnie do tego celu, w którym każda usługa, którą opracowujesz, jest automatycznie dostępna w punktach końcowych SOAP i REST natychmiast po wyjęciu z pudełka, bez wymaganej konfiguracji.
Przykład Hello World pokazuje, jak stworzyć prosty z usługą za pomocą just (nie wymaga konfiguracji):
Jest również wbudowany w przyjazny wynik HTML (gdy jest wywoływany z klientem HTTP, który ma opcję Akceptuj: tekst / HTML np. Przeglądarka), dzięki czemu możesz lepiej wizualizować wyniki swoich usług.
Obsługa różnych czasowników REST jest równie trywialna, oto pełna aplikacja CRUD z usługą REST na 1 stronie C # (mniej niż zajęłoby to skonfigurowanie WCF;):
Domyślnie Windows Communication Foundation (WCF) udostępnia punkty końcowe tylko klientom SOAP. W temacie: Tworzenie podstawowej usługi HTTP HTTP WCF punkt końcowy został udostępniony klientom innym niż SOAP. Może się zdarzyć, że chcesz udostępnić tę samą umowę w obie strony, jako punkt końcowy sieci Web i punkt końcowy SOAP. W tym temacie pokazano przykład tego, jak to zrobić.
Tak zrobiłem, aby działało. Upewnij się, że umieściłeś webHttp automaticFormatSelectionEnabled = "true" w zachowaniu punktu końcowego.
[ServiceContract]publicinterfaceITestService{[WebGet(BodyStyle=WebMessageBodyStyle.Bare,UriTemplate="/product",ResponseFormat=WebMessageFormat.Json)]stringGetData();}publicclassTestService:ITestService{publicstringGetJsonData(){return"I am good...";}}
<endpointBehaviors><behaviorname="jsonBehavior"><webHttpautomaticFormatSelectionEnabled="true"/><!-- use JSON serialization --></behavior></endpointBehaviors>
Odpowiedzi:
Możesz udostępnić usługę w dwóch różnych punktach końcowych. SOAP można użyć powiązania, które obsługuje SOAP, np. basicHttpBinding, RESTful można użyć webHttpBinding. Zakładam, że twoja usługa REST będzie w JSON, w takim przypadku musisz skonfigurować dwa punkty końcowe za pomocą następującej konfiguracji zachowania
Przykład konfiguracji punktu końcowego w twoim scenariuszu to
usługa będzie dostępna pod adresem
Zastosuj [WebGet] do umowy operacyjnej, aby ją zrestartować. na przykład
Uwaga: jeśli usługa REST nie znajduje się w JSON, parametry operacji nie mogą zawierać typu złożonego.
Odpowiedz na post dla SOAP i RESTful POX (XML)
Dla zwykłego starego XML jako formatu zwracanego jest to przykład, który działałby zarówno dla SOAP, jak i XML.
Zachowanie POX dla REST Plain Old XML
Punkty końcowe
Usługa będzie dostępna pod adresem
Żądanie REST spróbuj w przeglądarce,
Konfiguracja punktu końcowego klienta żądania SOAP dla usługi SOAP po dodaniu odwołania do usługi,
w C #
Innym sposobem jest ujawnienie dwóch różnych umów serwisowych i każdego z określoną konfiguracją. Może to generować niektóre duplikaty na poziomie kodu, jednak pod koniec dnia chcesz, aby działało.
źródło
Ten post ma już bardzo dobrą odpowiedź przez „Community wiki”, a także polecam zajrzeć na blog internetowy Ricka Strahla, istnieje wiele dobrych postów na temat WCF Rest w ten sposób .
Użyłem obu, aby uzyskać tego rodzaju usługę MyService ... Następnie mogę użyć interfejsu REST z jQuery lub SOAP z Java.
To jest z mojego Web.Config:
A to moja klasa usług (.svc-codebehind, nie wymaga interfejsów):
Właściwie używam tylko Jsona lub Xml, ale oba są tutaj w celach demonstracyjnych. Są to żądania GET, aby uzyskać dane. Aby wstawić dane, użyłbym metody z atrybutami:
źródło
Jeśli chcesz opracować tylko jedną usługę internetową i hostować ją w wielu różnych punktach końcowych (tj. SOAP + REST, z wyjściami XML, JSON, CSV, HTML). Powinieneś także rozważyć użycie ServiceStack, który zbudowałem właśnie do tego celu, w którym każda usługa, którą opracowujesz, jest automatycznie dostępna w punktach końcowych SOAP i REST natychmiast po wyjęciu z pudełka, bez wymaganej konfiguracji.
Przykład Hello World pokazuje, jak stworzyć prosty z usługą za pomocą just (nie wymaga konfiguracji):
Żadna inna konfiguracja nie jest wymagana, a ta usługa jest natychmiast dostępna z REST w:
Jest również wbudowany w przyjazny wynik HTML (gdy jest wywoływany z klientem HTTP, który ma opcję Akceptuj: tekst / HTML np. Przeglądarka), dzięki czemu możesz lepiej wizualizować wyniki swoich usług.
Obsługa różnych czasowników REST jest równie trywialna, oto pełna aplikacja CRUD z usługą REST na 1 stronie C # (mniej niż zajęłoby to skonfigurowanie WCF;):
źródło
Wydaje się, że MSDN ma teraz na ten temat artykuł:
https://msdn.microsoft.com/en-us/library/bb412196(v=vs.110).aspx
Wprowadzenie:
źródło
Musimy zdefiniować konfigurację zachowania do punktu końcowego REST
a także do usługi
Po zachowaniach następnym krokiem są powiązania. Na przykład basicHttpBinding do punktu końcowego SOAP i webHttpBinding do REST .
Wreszcie musimy zdefiniować 2 punkt końcowy w definicji usługi. Uwaga na adres = "" punktu końcowego, gdzie do usługi REST nie jest konieczne nic.
W interfejsie usługi definiujemy operację za pomocą jej atrybutów.
Dołączając do wszystkich stron, będzie to nasza definicja systemu WCF. ServiceModel.
Aby przetestować oba punkty końcowe, możemy użyć WCFClient do SOAP i PostMan do REST .
źródło
Tak zrobiłem, aby działało. Upewnij się, że umieściłeś
webHttp automaticFormatSelectionEnabled = "true" w zachowaniu punktu końcowego.
Wewnątrz model serwisowy
Zachowanie EndPoint
źródło