2009-03-13 16 views
20

Wystąpił problem podczas wywoływania usługi sieci Web na magistrali SAP PI z mojego klienta WCF. Operację definiuje się jako jednokierunkową, a metoda na mojej umowie o obsługę proxy jest odpowiednio dekorowana po dodaniu odwołania do usługi. Jednakże klient usługa dostaje wyjątek podczas wywoływania operacji według:Problem z wywoływaniem klienta WCF w trybie jednokierunkowym

Operacja jednokierunkowa powrócił niezerowym wiadomość z Action = „”

Korzystanie SoapUI, sposób na magistrala może zostać wywołana pomyślnie i zwraca kopertę SOAP z pustym ciałem. Ludzie autobusowe powiedziano mi, to jest według specyfikacji SOAP:


(specyfikacji SOAP, rozdział 4.7.9, operacje w jedną stronę):

Istnieją różne interpretacje jak HTTP ma być używany podczas wykonywania operacji jednokierunkowych.

R2714 W przypadku operacji jednokierunkowych, INSTANCE NIE MOŻE zwracać odpowiedzi HTTP zawierającej kopertę. W szczególności treść podmiotu odpowiedzi HTTP musi być pusta.

R2750 KONSUMENT MUSI zignorować kopertę przenoszoną w komunikacie odpowiedzi HTTP w operacji jednokierunkowej.

R2727 W przypadku operacji jednokierunkowych, konsument NIE interpretować udanej odpowiedzi kod stanu HTTP (tj 2xx) oznacza wiadomość jest ważna lub że odbiornik będzie je przetwarzać.


Tak wygląda, mój klient WCF nie spełnia R2750.

Dowiedziałem się, że kiedy wymuszam na operatorze kontrakt na proxy, aby być IsOneWay = false, wszystko działa.

Czy jest coś złego w sposobie, w jaki WCF obsługuje operacje jednostronne, czy też coś nie tak (bardziej prawdopodobne)? Czy jest coś jeszcze, co powinienem zrobić, po prostu nie wydaje się właściwe przesłonięcie wygenerowanego klienta proxy WCF.

Dzięki za wszelkie sugestie.

+2

Świetne pytanie +1. Twierdzę, że ich strona nie jest zgodna z R2714. Proszę rozważyć zgłoszenie incydentu z firmą Microsoft i poinformowanie nas o wyniku. –

+0

Podobne pytanie (i więcej informacji): http://stackoverflow.com/q/4510484/46039 –

+0

Link do specyfikacji SOAP 4.7.9 Operacje jednokierunkowe: http://www.ws-i.org/profiles/basicprofile -1.1.html –

Odpowiedz

11

Wygląda na to, że SAP PI niepoprawnie wysyła pustą kopertę SOAP, a .NET błędnie interpretuje tę kopertę.

Niektóre opcje z this thread:

  • zmieniać wygenerowany proxy i usunąć OneWay = true (lub dodać Oneway = false) do definicji metody
  • złapać naruszenie protokołu w obsługi wyjątków i ignorować go
  • użyć webreference 2,0 styl do wywołania usługi
  • zastosowania SAP załatać Note 1459995 - Soap Sender Adapter HTTP 202 i dodać & responsecode202 = true do url

Pierwsza i ostatnia opcja obie zadziałały dla mnie. Dalsza dyskusja na ten temat sap.com thread.

+0

Dziękuję za to, nadal jest to istotne dla mnie. –

+0

Oto odpowiedź, dziękuję za pomoc! – SDeezy

+0

Myślę, że z punktu widzenia systemu połączenie z serwisem internetowym zawsze powinno odpowiadać potwierdzeniem. Prawda czy fałsz, 1 lub 0, aby wskazać, że twoja wiadomość została odebrana i przetworzona z drugiej strony. –

4

Spojrzałbym na ten artykuł także Gerben van Loon here. Operacja jednokierunkowa może nie być jednym ze sposobów zgodnych z normami.

+0

Dzięki za ten link –

+1

Semantyka jednorazowych połączeń internetowych przez 'SOAP' jest porównywalna do' void() 'not fire-and forget. Podobnie jak metoda zwracająca 'void()' wywołanie jest blokowane i ma możliwość "zwrócenia" wyjątku. –

0

wierzę, że ten konkretny problem można rozwiązać dodając następującą deklarację atrybutu do pracy w porxy klienckim:

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]

+0

Dzięki za odpowiedź. Jednak dodanie tego do wygenerowanego klienta proxy jest mniej więcej takie samo jak ustawienie właściwości OneWay na wartość false. I niestety to nie zadziałało. –

0

Nie widząc co podpis metody wygląda, mój najlepszy przypuszczenie jest to, że twoja metoda zdefiniowała zwracanie czegoś innego niż "void". Ponieważ operacja jest jednokierunkowa, metodę można zdefiniować tylko za pomocą "void" (nie ma zwrotu). Coś jeszcze, a operacja NIE jest jednokierunkowa.

+0

Metoda faktycznie zwraca nieważne –

1

Sprawdź to SAP wkręcić się do pełnej dyskusji: http://scn.sap.com/thread/1627368

@Brian Niska odpowiedział na to pytanie poprawnie i bardzo dokładnie (to powinien dostać oznaczony jako odpowiedź).

Chciałbym również dodać, że jest to znany błąd, w którym adapter SOAP nie spełnia wyżej wymienionego WS-I Basic Profile 1.1 (R2750), a WCF nie spełnia (R2750). Wynik ... Godziny zmarnowanego czasu i zgrzytanie zębami ....

Powiązane problemy