2011-07-14 7 views
12

Mamy usługę, która pracuje z małych i dużych zbiorów danych (tworzenie dokumentu), i to działa dobrze dla niektórych połączeń, ale dla niektórych konkretnych wniosków (dokładnie tą samą metodą, różnych argumentów), że po prostu zwraca:WCF istnieje i działa częściowo, ale w przypadku niektórych połączeń zwraca "brak odsłuchu na punkcie końcowym - (404) nie znaleziono".

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at http://localhost:8010/MyService/MyService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.

Zauważ, że usługa jest pracy, dokumenty są generowane ale jak powiedział nie wszystkie z nich ... (a usługa może być otwarte od przeglądarki)

mam włączone śledzenie (System.Diagnostics) w internecie .config i nie otrzymałem dalszych informacji w svclog.

Wiązanie (wsHttp) jest skonfigurowany jako:

<binding name="wsHttpWithTrans" transactionFlow="True" messageEncoding="Mtom" maxReceivedMessageSize="65536000" maxBufferPoolSize="124288000"> 
     <readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="16384000" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 
    </binding> 

a także, tam:

<configuration> 
    <system.web> 
    <httpRuntime maxRequestLength="124288000" /> 
    </system.web> 
</configuration> 

wierzę wiadomość powinna mieścić się w granicach maxReceivedMessageSize i innych atrybutów.

Obecnie jestem podejrzliwy co do wielkości wiadomości, ale po prostu nie mogę być pewny - czy masz pojęcie, jak mogę dalej to debugować?

+0

*** status podrzędny *** nie jest dostępny w _WebException_: https://msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode(v=vs.110).aspx – Kiquenet

Odpowiedz

21

znalazłem to, co było złe za pomocą instrukcji na Troubleshooting Failed Requests Using Tracing in IIS 7 (bardzo fajnych rzeczy przy okazji)

tam, widziałem, że błąd był w rzeczywistości 404,13, który łatwo doprowadziła mnie do tego, co jest naprawdę źle: długość utworu zbyt duży.

W końcu, rozwiązanie było dodać do internetowej config:

<configuration> 
... 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="204800000" /> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</configuration> 

, a także upewnić się, że strona internetowa nie domyślne zastępują go za pomocą:

"%WINDIR%\System32\inetsrv\appcmd.exe" list config "Default web site" -section:requestFiltering

+1

to też był mój problem. błąd wracający z iis wynosił 404, ale zmiana tego limitu rozwiązała problem. –

+0

Niż dużo ... trochę się borykało ... –

0

Jeśli podejrzewasz, że treść i/lub czas trwania wiadomości jest zbyt długi, możesz spróbować przechwycić połączenia, używając czegoś takiego jak Fiddler - to powinno uspokoić Cię w tych punktach.

+0

Nie mogę zainstalować skrzypka, ponieważ jest on na serwerach produkcyjnych ... Spróbuję jednak uruchomić go przez sysadmins, ale nie spodziewam się, że zostanie zatwierdzony ... – veljkoz

+0

Jeśli możesz uzyskać dostęp do usługi od lokalnego przeglądarkę, możesz zainstalować lokalny skrzypek (w rzeczywistości, tam gdzie powinien być zainstalowany, najlepiej) - przechwytuje tylko ruch HTTP, więc powinieneś mieć dobry widok na kanał komunikacyjny. – ZombieSheep

+0

Tak, mam to, ale problem polega na komunikacji między wieloma usługami WCF, które znajdują się na tym samym serwerze. – veljkoz

3

Znalazłem oprócz maxAllowedContentLength, maxRequestLength po stronie serwera w konfirmacji WCF również musi zostać zwiększona. Zauważyłem, że wartości muszą zostać zwiększone, aby wyjątek mógł zostać rozwiązany. W pliku .config na stronie serwera usług WCF upewnij się, aby dodać następujące:

<system.web> 
    <!--Increase 'maxRequestLength' to needed value: 100mb (value is in kilobytes)--> 
    <httpRuntime maxRequestLength="102400"/> 
</system.web> 
+0

Zobacz - potrzebne do pokazania * obie wartości * razem są potrzebne i oba zazwyczaj nie są wystarczająco duże. W moich testach żadna z nich nie rozwiąże problemu. – atconway

0

Sprawdź atrybut nazwa elementu serwisowego w pliku web.config:

<configuration> 
    <system.serviceModel> 
     <services> 
      <service name="..."> 

Nazwa usługi powinna zawierać poprawna przestrzeń nazw + nazwa klasy. Można go znaleźć w kodzie lub poprzez przeglądanie znaczników pliku .svc (lub otworzyć plik .svc z notatnikiem) dla atrybutu Service = "...".

Powiązane problemy