2010-02-22 12 views
18

Tengo una aplicación que utilizará WCF para servir varios pedazos de datos a los clientes. Sin embargo, debido al tamaño de algunos de los conjuntos de datos que se devolverán (y eso se debe a que la aplicación cliente necesita mostrar una gran cantidad de objetos en una lista, no porque haya sido perezoso en el diseño) ' m al alcanzar los límites de tamaño del mensaje.WCF Data Service - ¿Cómo diagnosticar el error de solicitud?

Yo esperaba esto, y planeé implementar transmisión de datos/respuesta de transmisión (creo que Pablo Cibraro escribió un artículo sobre esto una vez). Sin embargo, he visto algunas demos que hacen que los servicios de datos WCF se vean realmente geniales. Simplemente no he podido hacer que funcione para mí.

No tengo un backend de base de datos, y no estoy alojando dentro de IIS. He podido obtener algunos ejemplos sobre objetos básicos, pero tan pronto como los conecto a los objetos de mi aplicación, simplemente no funciona. Obtengo un Error de solicitud, que parece estar diseñado para ser inútil. solo sugiere revisar los registros del servidor sin sugerir cómo podría hacerlo. Sospecho que supone que estoy alojando con IIS, e IIS podría registrar mensajes para los servicios de datos que aloja.

Una clase razonablemente simple que estoy tratando de trabajar es un mensaje de registro (Quiero un cliente-estilo tablero de diagnóstico que sea capaz de mostrar de forma remota los registros del servidor de, digamos, los últimos 24 horas):

El uso de esta clase genera el error, mientras que si lo señalo en una clase me burlo como una prueba (como en la demostración de Pablo aquí: http://msdn.microsoft.com/en-us/data/cc745968.aspx) entonces funciona bien. ¿Alguna idea sobre por qué esto es así o cómo puedo obtener algo útil del error?

A continuación es mi definición del servicio y la clase que estoy usando para exponer el IQueryable <> aplicación de las colecciones que desea devolver (por el momento sólo he hecho el registro, que es de tipo List<Message>)

public class DataServiceFacade 
{ 
    public IQueryable<Message> Log 
    { 
     get 
     { 
      return Program.Log.AsQueryable(); 
     } 
    } 
} 

public class DataServiceHost : DataService<DataServiceFacade> 
{ 
    public static void InitializeService(IDataServiceConfiguration config) 
    { 
     config.UseVerboseErrors = true; 
     config.SetEntitySetAccessRule("*", EntitySetRights.All); 
     config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
    } 
} 

Ahora, esto podría ser algo simple, pero ya he pasado demasiado tiempo golpeando mi cabeza contra esta pared de ladrillo en particular. Tenía la esperanza de que los Servicios de datos manejaran cosas como buscarme y me dieran un buen formato flexible que funcionara en diferentes plataformas.

Además, si no va a ser posible usar los servicios de datos para esto, agradecería cualquier información sobre la búsqueda de datos o la transmisión de la colección.

Gracias

Respuesta

19

Suena como si sólo se está viendo el mensaje genérico "Error de respuesta". Para ver los detalles de ese mensaje, debe modificar el comportamiento a "includeExceptionDetailInFaults".

Puede cambiar el comportamiento en su archivo de configuración.

<services> 
    <service name="DataServiceHost" 
      behaviorConfiguration="DataServiceBehavior"> 
     <endpoint name="DataServiceHost" 
        address="" 
        binding="webHttpBinding" 
        contract="System.Data.Services.IRequestHandler" /> 

    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="DataServiceBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
+0

Hmmm ... Pensé que había intentado eso pero supongo que lo hice mal de alguna manera. De todos modos, llegar allí ... ahora estoy recuperando errores razonables. El que estoy trabajando en la actualidad trata con el hecho de que mi clase de Mensaje tiene una enumeración (Tipo - error, advertencia, etc.). Hay bastantes enumeraciones en mi código. Me molestaré un poco si no puedo usar ninguna de ellas :) Supongo que lo que haré es usar IgnoreProperties y agregar otras propiedades para envolverlas como tipos más amigables a los servicios de datos. Gracias! – JohnL

+0

En caso de que alguien se esté preguntando sobre la cosa enum, aparentemente puede usarlos con algunos tipos adicionales de escritura: http://msdn.microsoft.com/en-us/library/aa347875.aspx – JohnL

Cuestiones relacionadas