2012-04-10 15 views
6

Todavía estoy trabajando en una solución WCF que debería poder consultar el programa de fondo del programa y devolver los resultados.WCF consultando una matriz de objetos

Las tiendas de back-end de un diccionario de objetos llamados Groups y pueden ser consultados con funciones como:

  • GetGroup para obtener un solo grupo por ID
  • GetGroups para obtener una lista de grupos por las etiquetas.

El GetGroup funciona bien con WCF Test Client y la aplicación que he creado. y funciona con el siguiente formato de código de la aplicación:

 List<string> values = new List<string>(); 
     GroupServiceClient client = new GroupServiceClient("WSHttpBinding_IGroupService"); 
     www.test.co.uk.programme.programme Group = new www.test.co.uk.programme.programme(); 
     DateTime time = DateTime.Now; 
     values.Clear(); 
     client.Open(); 

     Group.number = textBox1.Text; 
     client.GetGroup(ref time, ref Group); 

     GroupStorageMessage toReturn = new GroupStorageMessage(); 
     toReturn.group = Group; 

     selectedGroupId = Convert.ToString(toReturn.group.number); 

     values.Add(Convert.ToString(toReturn.group.number)); 
     values.Add(Convert.ToString(toReturn.group.name)); 

     listBox1.ItemsSource=values; 

     client.Close(); 

Los GetGroups funciona perfectamente con el cliente de prueba WCF pero no con mi solicitud.

envía la consulta como debería pero lo hace volver Null (tenga en cuenta que este código es formar otra aplicación y estoy usando una referencia en lugar de un archivo de proxy)

 ServiceReference1.programme Group = new ServiceReference1.programme(); 
     ServiceReference1.GroupServiceClient Client = new ServiceReference1.GroupServiceClient(); 
     DateTime Time = DateTime.Now; 

     Client.Open(); 

     string[] aa = new string[1]; 

     aa[0] = textBox1.Text; 
     Group.tags = aa; 
     Client.GetGroups(ref Time, Group); 

     ServiceReference1.GroupArrayMessage toReturn = new ServiceReference1.GroupArrayMessage(); 

     ServiceReference1.programme[] Groups = new ServiceReference1.programme[1]; 

     toReturn.groups = Groups; = returns null 

en nueva ServiceReference1. programa [1]; De hecho, estoy adivinando qué poner ahí.

Interfaz:

[ServiceContract(Namespace = "http://www.Test.co.uk/groupstorage")] 
public interface IGroupStorageService 
{ 
    /** 
    * Get a group from the collection of groups 
    */ 
    [OperationContract] 
    GroupStorageMessage GetGroup(GroupStorageMessage message); 
    /** 
    * Add a group to the collection of groups 
    */ 
    [OperationContract] 
    void AddGroup(GroupStorageMessage message); 
    /** 
    * Remove a group from the collection of groups 
    */ 
    [OperationContract] 
    void RemoveGroup(GroupStorageMessage message); 
    /** 
    * Update a group in the collection of groups 
    */ 
    [OperationContract] 
    void UpdateGroup(GroupStorageMessage message); 

    [OperationContract] 
    GroupArrayMessage GetGroups(GroupStorageMessage message); 
} 

Contrato mensaje:

[MessageContract] 
public class GroupArrayMessage 
{ 
    /** 
    * Message header is the timestamp when the message was created 
    */ 
    [MessageHeader(Name = "time")] 
    public DateTime Time; 
    /** 
    * Message body is a collection of Users 
    */ 
    [MessageBodyMember(Name = "groups")] 
    public Group[] Groups; 
} 

Contacto del Grupo (a veces conocido como el programa)

[DataContract(Namespace = "http://www.test.co.uk/programme", Name = "programme")] 
public class Group 
{ 
    /** 
    * The number representing the Programme (Programme ID) 
    */ 
    [DataMember(Name = "number")] 
    public string Number; 
    /** 
    * The name of the Programme 
    */ 
    [DataMember(Name = "name")] 
    public string Name; 
    /// <summary> 
    /// Add Tags 
    /// </summary> 
    [DataMember(Name = "tags")] 
    public string[] Tags; 
+0

Pegue el código de la interfaz de servicio y la clase de implementación del servicio. También pegue el código para la clase grupal. Será más fácil responder cuando el código esté disponible –

+1

PD Sé que la consulta enviada desde la aplicación es correcta, ya que el sistema de registro de fondo lo marca como una consulta exitosa y devuelve el resultado en el archivo de registro – user1211929

+0

Pregunta interesante. ¿Qué pasa con los archivos app.config? ¿Son iguales en tus dos aplicaciones? –

Respuesta

4

fin encontré la solución:

 GroupService.GroupArrayMessage toReturn = new GroupService.GroupArrayMessage(); 


     GroupService.programme[] Groups = Client.GetGroups(ref Time, Group); 

     toReturn.groups = Groups; 

     listBox1.ItemsSource = toReturn.groups;