2011-07-14 15 views
12

Tenemos servicio que está trabajando con pequeñas y grandes conjuntos de datos (generación de documentos), y está funcionando muy bien para algunas llamadas, pero para algunas peticiones específicas (exactamente el mismo método, diferentes argumentos) simplemente devuelve:WCF Existe y funciona parcialmente, pero para algunas llamadas devuelve "sin escucha de punto final - (404) no encontrado".

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.

Tenga en cuenta que el servicio es de trabajo, los documentos se generan, pero como he dicho no todos ellos ... (y el servicio se puede abrir desde el navegador)

me he convertido en el rastreo (system.diagnostics) en web .config y no obtuvo más información en svclog.

La unión (wsHttp) está configurado como:

<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> 

y también, hay:

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

Creo que el mensaje debe caer dentro de los límites de maxReceivedMessageSize y otros atributos.

Actualmente desconfío del tamaño del mensaje, pero no puedo estar seguro, ¿tiene alguna idea de cómo puedo depurar esto más?

+0

*** substatuscode *** no disponible en _WebException_: https://msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode(v=vs.110).aspx – Kiquenet

Respuesta

21

encontré lo que estaba mal utilizando instrucciones sobre Troubleshooting Failed Requests Using Tracing in IIS 7 (materia muy fresca por cierto)

Allí, vi que el error fue de hecho el 404.13, lo que me llevó fácilmente a lo que es realmente malo: La longitud del contenido demasiado grande.

Al final, la solución fue la de añadir esto a web.config:

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

y, además, asegurarse de que el sitio web por defecto no anula usando:

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

+1

este fue mi problema también. el error que regresaba de iis era 404, pero cambiar este límite solucionó el problema. –

+0

Gracias mucho ... estaba luchando un poco ... –

0

Si sospecha del contenido y/o la duración del mensaje, puede intentar interceptar las llamadas usando algo como Fiddler, lo que debería hacer que su mente se tranquilice en esos puntos.

+0

No puedo instalar el violinista porque está en servidores de producción ... Intentaré ejecutarlo por los administradores del sistema, pero no espero que se apruebe ... – veljkoz

+0

Si puede acceder al servicio desde su servidor local navegador, puede instalar el violín localmente (de hecho, es donde debería estar instalado, idealmente); solo intercepta el tráfico HTTP, por lo que debería obtener una buena vista del canal de comunicaciones. – ZombieSheep

+0

Sí, lo tengo, pero el problema está en la comunicación entre múltiples servicios WCF que residen en el mismo servidor. – veljkoz

3

Además de maxAllowedContentLength, encontré que el maxRequestLength en el lado del servidor en su conffguración WCF debe aumentarse también. Encontré que ambos valores tuvieron que aumentarse para que se resuelva la excepción. En el .config para el lado del servidor servicio WCF asegúrese de agregar lo siguiente:

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

Vea eso: es necesario mostrar * ambos * se necesitan juntos valores y, por lo general, ambos no son lo suficientemente grandes. En mis pruebas, ninguno de los dos resolvería el problema de forma independiente. – atconway

0

Comprobar el atributo name del elemento de servicio en el web.config:

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

El nombre del servicio debe contener el espacio de nombre correcto + nombre de clase. Puede encontrar esto en código o buscando en el marcado del archivo .svc (o abra el archivo .svc con el bloc de notas) para el atributo Service = "...".

Cuestiones relacionadas