2012-04-10 22 views
6

Sto ancora lavorando su una soluzione WCF che dovrebbe essere in grado di interrogare il back-end del programma e restituire i risultati.WCF interrogazione di un array di oggetti

I negozi di back-end di un dizionario di oggetti chiamati Groups e possono essere interrogati con funzioni come:

  • GetGroup per ottenere un singolo gruppo per ID
  • GetGroups per ottenere un elenco di gruppi dai tag.

Il GetGroup funziona correttamente con il client di test WCF e l'applicazione che ho creato. E funziona con il seguente modulo di codice dell'applicazione:

 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(); 

I GetGroups funziona perfettamente con prova WCF Cliente ma non con la mia domanda.

Si invia la query come dovrebbe, ma lo fa tornare Null (si prega di notare che questo codice è formare un'altra applicazione e sto usando un riferimento al posto di un file 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 

nella nuova ServiceReference1. programma [1]; In realtà sto indovinando cosa mettere lì.

Interfaccia:

[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); 
} 

Messaggio Contratto:

[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; 
} 

gruppo di contatto (a volte indicato come programma)

[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

Si prega di incollare il codice dell'interfaccia di servizio e la classe di implementazione del servizio. Inoltre, si prega di incollare il codice per la classe del gruppo. Sarà più facile rispondere quando il codice sarà disponibile –

+1

PS So che la query inviata dall'applicazione è valida, poiché il sistema di registrazione back-end la contrassegna come una query corretta e restituisce il risultato nel file di registro – user1211929

+0

Domanda interessante. Che dire dei file app.config. Sono uguali in entrambe le tue app? –

risposta

4

ho finalmente trovato la soluzione:

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


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

     toReturn.groups = Groups; 

     listBox1.ItemsSource = toReturn.groups;