Niezgodność ContractFilter w wyjątku EndpointDispatcher

Mam następujący scenariusz, który próbuję przetestować:

  1. wspólny WSDL
  2. punkt końcowy WCF, który implementuje obiekty oparte na WSDL i jest hostowany w IIS.
  3. Aplikacja kliencka, która używa serwera proxy opartego na WSDL do tworzenia żądań.

Kiedy wykonuję połączenie usługi internetowej od klienta do punktu końcowego usługi, dostaję następujący wyjątek:

{"wiadomość z działaniem" http://IMyService/CreateContainer " nie może być przetwarzany w odbiorniku, z powodu niedopasowania filtra kontraktowego w punkcie końcowym. Może to być spowodowane niedopasowaniem umowy (niedopasowanie działań między nadawcą a odbiorcą) lub wiążącym/zabezpieczającym niedopasowaniem między nadawcą a odbiorcą. Sprawdź, czy nadawca i odbiorca mają tę samą umowę i taką samą wiążącą umowę(w tym wymogi bezpieczeństwa, np. wiadomość, Transport, brak)."}

Zacząłem używać MS Service Trace Viewer, ale nie wiem, gdzie szukać. Patrząc na klasy w kliencie i punkcie końcowym, wyglądają one identycznie.

Jak zacząć debugować ten problem?

Jakie są możliwe przyczyny tego wyjątku?

 119
wcf
Author: SteveC, 2011-03-30

26 answers

A "contractfilter mismatch at the EndpointDispatcher" means the receiver Couldn ' t process the message because it do not match any of the contract receiver has configured for the endpoint which receiver the message.

Może być tak dlatego, że:

  • masz różne umowy między Klientem a nadawcą.
  • używasz innego powiązania między Klientem a nadawcą.
  • ustawienia zabezpieczeń wiadomości nie są spójne między Klientem a nadawca.

Spójrz na EndpointDispatcher zajęcia po więcej informacji na ten temat.

Więc:

Upewnij się, że kontrakty klienta i serwera pasują.

  • jeśli wygenerowałeś klienta z WSDL, czy WSDL jest aktualne?
  • jeśli ostatnio zmieniłeś umowę, czy wdrożyłeś odpowiednią wersję zarówno Klienta, jak i serwera?
  • Jeśli ręcznie tworzysz klasy kontraktów klientów, upewnij się, że przestrzenie nazw, nazwy elementów i nazwy akcji są zgodne z oczekiwaniami serwera.

Sprawdź powiązania między Klientem a serwerem są takie same.

  • Jeśli używasz .plik konfiguracyjny aby zarządzać punktami końcowymi, upewnij się, że elementy wiążące pasują.

Sprawdź, czy ustawienia zabezpieczeń są takie same między Klientem a serwerem.

  • Jeśli używasz .plik konfiguracyjny aby zarządzać punktami końcowymi, upewnij się, że elementy zabezpieczeń są zgodne.
 77
Author: Paul Turner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-17 14:30:26

Miałem ten błąd i był on spowodowany przez kontrakt receviera nie implementujący wywoływanej metody. Zasadniczo, ktoś nie wdrożył ostatniej wersji usługi WCF na serwerze hosta.

 75
Author: adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-24 15:10:05

Otrzymasz również to, jeśli spróbujesz połączyć się z niewłaściwym adresem URL ;)

Mam dwa punkty końcowe i usługi zdefiniowane w moim systemie, o podobnych nazwach.

Dostałem ten dokładny błąd, gdy adresy URL zostały zamienione na moim kliencie w pewnym momencie. Naprawdę podrapała się biedna po brodzie aż w końcu zrozumiałam ten głupi błąd.

 20
Author: Brady Moritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 19:00:00

Miałem ten problem i okazało się, że w moim generatorze proxy, który skopiowałem z innego serwisu, zapomniałem zmienić nazwę usługi.

Zmieniłem to...
Return New Service1DataClient(binding, New EndpointAddress(My.Settings.WCFServiceURL & "/Service1Data.svc"))

Do...

Return New Service2DataClient(binding, New EndpointAddress(My.Settings.WCFServiceURL & "/Service2Data.svc"))

To był prosty błąd kodu, ale prawie niemożliwy do debugowania. Mam nadzieję, że to oszczędzi komuś czasu.

 20
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-03 15:03:25

Dla Klienta Javy wywołującego punkt końcowy. NET. Było to spowodowane niedopasowaniem nagłówka działania mydła.

Content-Type: application/soap+xml;charset=UTF-8;action="http://example.org/ExampleWS/exampleMethod"

Powyższy nagłówek HTTP lub następujący znacznik XML musi pasować do akcji/metody, którą próbujesz wywołać.

   <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:gen="http://schemas.datacontract.org/2004/07/GenesysOnline.WCFServices">
   <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
      <wsa:To>https://example.org/v1/Service.svc</wsa:To>
      <wsa:Action>http://example.org/ExampleWS/exampleMethod</wsa:Action>
   </soap:Header>
   <soap:Body>
    ...
   </soap:Body>
</soap:Envelope>
 10
Author: chinto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 03:42:54

Rozwiązałem to dodając do mojej realizacji umowy:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

Na przykład:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class MyUploadService : IMyUploadService
{

}
 9
Author: ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 12:39:04

Dostałem to po skopiowaniu pliku svc I zmianie jego nazwy. Chociaż nazwa pliku i svc.plik cs został poprawnie przemianowany, znaczniki nadal odwołują się do oryginalnego pliku.

Aby to naprawić, kliknij prawym przyciskiem myszy skopiowany plik svc i wybierz View Markup i zmień odniesienie do usługi.

 8
Author: iKnowNothing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 09:40:01

Jak wspomniano w innych odpowiedziach, takich jak @ chinto, dzieje się tak, gdy element nagłówka SOAP: Action nie pasuje do punktu końcowego.

Możesz znaleźć poprawny URI do użycia, patrząc na WSDL serwera. Zobaczysz element operacji z wprowadzanym potomkiem, który ma atrybut "Action". To jest to, co twoje mydło: działanie musi być na życzenie klienta.

<wsdl:operation name="MethodName">
<wsdl:input wsaw:Action="http://tempuri.org/IInterface/MethodName" message="tns:IInterface_MethodName_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IInterface/MethodNameResponse" message="tns:IInterface_MethodName_OutputMessage"/>
</wsdl:operation>
 5
Author: Carson Evans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 15:58:37

Miałem ten sam problem. Problem polegał na tym, że skopiowałem kod z innej usługi jako punkt wyjścia i nie zmieniłem klasy usługi w .plik svc

Otwórz .svc file an upewnij się, że atrybut Service jest poprawny.

 <%@ ServiceHost Language="C#" Debug="true" Service="SME.WCF.ApplicationServices.ReportRenderer" CodeBehind="ReportRenderer.svc.cs" %>
 3
Author: AntonK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 06:43:06

Błąd mówi, że istnieje niedopasowanie, zakładając, że masz wspólny kontrakt oparty na tym samym WSDL, to niedopasowanie jest w konfiguracji.

Na przykład, że klient używa nettcpip, a serwer jest skonfigurowany do korzystania z podstawowego http.

 2
Author: Shiraz Bhaiji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 14:54:00

Miałem podobny błąd. Może to być spowodowane zmianą ustawień umowy w pliku konfiguracyjnym po ponownym włączeniu go do projektu. rozwiązanie-zaktualizuj referencję webservice w projekcie VSstudio lub utwórz nowy serwer proxy za pomocą svcutil.exe

 2
Author: Mahesh Kurup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-11 18:20:54

Jeśli wywołujesz metodę WCF, powinieneś umieścić interfejs w nagłówku.

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
if (Url.Contains(".svc"))
{
    isWCFService = true;
    req.Headers.Add("SOAPAction", "http://tempuri.org/WCF_INterface/GetAPIKeys");
}
else 
{
    req.Headers.Add("SOAPAction", "\"http://tempuri.org/" + asmxMethodName+ "\"");
}
 2
Author: Ahmet Arslan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-22 12:45:54

Ten błąd pojawia się zazwyczaj, jeśli kod nie jest prawidłowo wdrożony.

W moim przypadku mam dwie usługi ServiceA i ServiceB. Znalazłem problem, że pliki ServiceB nie zostały poprawnie wdrożone. Z tego powodu, gdy ServiceA wywoływał ServiceB wewnętrznie, podawał poniżej błąd.

** Błąd**

Upewnij się, że pliki i referencje są poprawnie wdrożone.

 1
Author: Atul K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-14 13:08:46

Spędziłem dni szukając odpowiedzi i znalazłem ją, ale nie w tym wątku. Jestem nowy w WCF i C#, więc dla niektórych odpowiedź może być oczywista.

W mojej sytuacji miałem narzędzie klienckie, które pierwotnie zostało opracowane dla usługi ASMX i dla mnie zwracało ten sam komunikat o błędzie.

Po wypróbowaniu różnego rodzaju rekomendacji znalazłem to miejsce:

Http://myshittycode.com/2013/10/01/the-message-with-action-cannot-be-processed-at-the-receiver-due-to-a-contractfilter-mismatch-at-the-endpointdispatcher/{[12]

To postawiło mnie na właściwej drodze. W szczególności" soap:operation " - WCF dodawało nazwę usługi do przestrzeni nazw:

Klient oczekiwał Http://TEST.COM/Login, ale WCF wysłał Http://TEST.COM/IService1/Login. Rozwiązaniem jest dodanie ustawienia do [OperationContract] w następujący sposób:

[OperationContract(Action = "http://TEST.COM/Login", ReplyAction = "http://TEST.COM/Login")] (Ignoruj puste spacje w Http)

 1
Author: KSNSACC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 08:23:13

To może być z dwóch powodów:

  1. Serwis ref jest nieaktualny, kliknij prawym przyciskiem myszy serwis ref N zaktualizuj go.

  2. Umowa która została zrealizowana może być inna co klient ma. Porównaj obie usługi N umowa klienta N naprawić umowy niedopasowanie.

 1
Author: Abdul sami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-31 06:52:21

Również może być przydatne dla tych, którzy robią to przez kodowanie. Musisz dodać WebHttpBehavior () do dodanego punktu końcowego usługi. Coś w stylu:

restHost.AddServiceEndpoint(typeof(IRestInterface), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior()); 

Spójrz na : https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/calling-a-rest-style-service-from-a-wcf-service

 1
Author: Amir Dashti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 18:08:09

Głupie, ale zapomniałem dodać [OperationContract] do mojego interfejsu serwisu (tego oznaczonego [ServiceContract]) i wtedy też dostajesz ten błąd.

 0
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-26 11:01:34

Twój Klient nie był updated.So Zaktualizuj swoje usługi z serwisu internetowego, a następnie Przebuduj swój projekt

 0
Author: Masoud Bahrami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-07 20:10:00

Ja też miałem ten problem. Okazało się, że jest to spowodowane serializerem kontraktu na końcu serwera. Nie mógł zwrócić mojego obiektu kontraktu danych , ponieważ niektóre jego membrany danych były właściwościami readonly .

Upewnij się, że obiekty mają ustawione właściwości, które mają być serializowane.

 0
Author: Crono,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 18:38:48

O dziwo obejdzieliśmy ten błąd, używając tej samej obudowy, której użyto nazwy ścieżki i operacji. Najwyraźniej rozróżniała wielkość liter. Jeśli ktoś wie dlaczego, proszę o komentarz. Dziękuję!

 0
Author: MikeTeeVee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-26 14:27:15

Więc moja sprawa była następująca. Nie używałem proxy do interakcji klient-serwer, użyłem ChannelFactory (więc wszystkie porady dotyczące aktualizacji do referencji usługi były dla mnie bez znaczenia).

Usługa była hostowana w IIS i z jakiegoś powodu miała błędne odniesienia w folderze bin. Rekompilacja projektu po prostu nie prowadziła do nowych bibliotek DLL w tym folderze.

Więc po prostu usunąłem wszystkie rzeczy stamtąd i dodałem odniesienie do usługi w tym samym rozwiązaniu, a następnie przekompilowane i teraz wszystko działa.

 0
Author: psfinaki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 11:54:27

Mój problem okazał się czymś rzadkim, ale i tak o tym wspomnę.

Napotkałem problem z wdrożeniem do naszego środowiska programistycznego. Na tej maszynie nasza osoba budująca stworzyła dwa foldery (wdrożyła dwie aplikacje). Stara wersja i nowa aktualna wersja. więc jeśli nie masz dwóch wersji aplikacji na serwerze WWW, Nie dotyczy to Ciebie.

Nowa lokalizacja, którą stworzył, miała niestandardową nazwę jako pierwsza część adresu url po host:

net.tcp://dev.umbrellacorp.com/DifferentFolderName/MyProvider

Na mojej lokalnej maszynie mój klient wskazywał na standardową nazwę folderu ustawioną we wszystkich środowiskach( poza deweloperem), w tym w moim środowisku lokalnym.

net.tcp://dev.umbrellacorp.com/AppServices/MyProvider

Kiedy rozwaliłem i wymieniłem sieć.config przy rozwoju z moją lokalną kopią, część adresu url, która musiała być specjalna, została zdmuchnięta ze standardową częścią, więc w rezultacie klient na dev wskazał na starą podanie.

Stary wniosek miał starą umowę i nie zrozumiał żądania i wyrzucił ten błąd.

 0
Author: toddmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 14:28:28

Miałem ten sam błąd na wdrożonej usłudze WCF, problem był związany z inną usługą wdrożoną z innym kontraktem z tym samym portem.

Rozwiązanie

Używałem różnych portów w sieci.config i problem zniknął.

serwis 1

contract="Service.WCF.Contracts.IBusiness1" 
baseAddress="net.tcp://local:5244/ServiceBusiness" 

serwis 2

contract="Service.WCF.Contracts.IBusiness2"
baseAddress="net.tcp://local:5243/ServiceBusiness"

również , napotkałem tę sytuację, używając różnych portów dla tego samego adresu między usługą a konsumentem.

 0
Author: DanielV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-30 09:17:25

Miałem ten błąd, ponieważ mam starą wersję DLL w GAC mojego serwera. Więc upewnij się, że wszystko jest odwołane poprawnie i że assembly / GAC jest aktualny z dobrym dll.

 0
Author: Helpha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 16:45:32

Miałem ten problem z moim serwerem testowym, ponieważ uruchamiałem dwie kopie tego samego wcf na tej samej puli aplikacji. To, co dla mnie rozwiązało, to tworzenie oddzielonych PUL dla każdej wersji na moim wcf i ponowne uruchomienie IIS po tym.

 0
Author: Johann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 22:02:54

Dla tych, którzy używają NodeJS z axios do składania żądań SOAP należy dołączyć SOAPAction header. Sprawdź poniższy przykład:

axios.post('https://wscredhomosocinalparceria.facilinformatica.com.br/WCF/Soap/Emprestimo.svc?wsdl',
           xmls,
  {headers:
  {
    'Content-Type': 'text/xml',
    SOAPAction: 'http://schemas.facilinformatica.com.br/Facil.Credito.WsCred/IEmprestimo/CalcularPrevisaoDeParcelas'}
  }).then(res => {
    console.log(res)
  }).catch(err => {
    console.log(err.response.data)
  })
 0
Author: Christian Saiki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 18:56:25