2010-05-21 18 views
5

Estoy recibiendo ese maravilloso mensaje de error ambiguo cuando uso uno de mis métodos web en mi servicio web WCF. Como ese mensaje de error no proporciona ninguna explicación en absoluto, me permite publicar mi teoría.WCF- "La conexión subyacente se cerró: la conexión se cerró inesperadamente"

Creo que puede tener algo que ver con el tipo de retorno que estoy usando

Tengo una DLL Tipos que se refrenced tanto en el servicio web y el cliente. En esta DLL es la clase base ExceptionMessages. Hay un niño de esta clase llamado DrawingExcepions.

Aquí hay un código:

public class ExceptionMessages 
{ 
    public object[] ReturnValue { get; set; } 
} 

public class DrawingExceptions : ExceptionMessages 
{ 
    private List<DrawingException> des = new List<DrawingException>(); 
} 

public class DrawingException 
{ 
    public Exception ExceptionMsg { get; set; } 
    public List<object> Errors { get; set; } 
} 

El código usando:

[OperationContract] 
    ExceptionMessages createNewBom(Bom bom, DrawingFiles dfs); 

    public ExceptionMessages createNewBOM(Bom bom, DrawingFiles dfs) 
    { 
      return insertAssembly(bom, dfs); 
    } 

    public DrawingExceptions insertAssembly(Bom bom, DrawingFiles dfs) 
    { 
     DrawingExceptions des = new DrawingExceptions(); 

     foreach (DrawingFile d in dfs.drawingFiles) 
     { 
      DrawingException temp = insertNewDrawing(bom, d); 
      if (temp != null) 
       des.addDrawingException(temp); 

      if (d.Child != null) 
       des.addDrawingException(insertAssembly(bom, d.Child)); 
     } 

     return des; 
    } 

Vuelve a:

ExceptionMessages ems = client.createNewBom(bom, currentDFS); 

    if (ems is DrawingExceptions) { } 

Básicamente, el tipo de retorno de la WebMethod es ExceptionMessages obstante lo haría normalmente estar enviando la clase de niño de nuevo en su lugar.

Mi única idea es que es el niño el que causa el error, pero hasta donde he leído, esto no debería tener ningún efecto. ¿Alguien tiene alguna idea de lo que podría estar yendo mal aquí?

Si se requiere más información, pregunte :)

Gracias.

Respuesta

4

Sí, este mensaje es grande :)

menudo he encontrado que es útil para habilitar el seguimiento, como se describe en this article. Eche un vistazo a la sección llamada 'Configuración recomendada para implementación o depuración'.

2

Recibí este error cuando devolvía una carga útil grande, resultó ser el DataContractSerialiser deteniendo la transmisión intermedia porque había alcanzado la configuración predeterminada de maxItemsInObjectGraph, y agregó el seguimiento a mi comportamiento de punto final que solucionó el problema.

<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
2

Tuve el mismo problema y encontré esta publicación como una posible solución a un error de tiempo de espera que mi servicio WCF estaba teniendo. En mi caso, la respuesta de Squig ofreció una pista sobre la condición subyacente. Si bien es fácil aumentar el tamaño de la carga útil máxima, obviamente es una opción con implicaciones de rendimiento.

En mi caso, estoy cargando un gráfico de objeto para guardarlo, y luego devolviendo el objeto actualizado a mi cliente para que pueda hacer un seguimiento de las claves externas, etc. Para mi problema, la pregunta era ¿cómo podría haber llegado? mucho más grande en el viaje de regreso. Excavé y me di cuenta de que la causa raíz del tamaño expandido de la carga útil era que cuando añadía un objeto secundario a mi gráfico de objetos, las propiedades de navegación de esos objetos secundarios agregaban referencias al elemento principal, que tenía referencias al elemento secundario, y Y así sucesivamente.

Fui a mi archivo de edmx, eliminé las propiedades de navegación de los objetos secundarios ofensivos y mi tamaño de paquete fue domesticado.

Espero que esto ayude a alguien más!

+0

Esta fue la única respuesta más útil que he leído en 200 reputación. – Qqbt

0

Acabo de tener el mismo problema, pero ninguna de las respuestas anteriores resolvió el problema.

iba a traer de vuelta una lista de objetos LINQ, la base de datos tiene todas las relaciones configurados correctamente lo que hace que los objetos se vinculan automáticamente con LINQ ... Esto era parar la consulta de trabajo.

He resuelto mediante la eliminación de las relaciones de la LINQ DBML

Cuestiones relacionadas