2011-12-22 3 views
1

J'essaie d'utiliser WCF pour la première fois mais j'ai rencontré un problème assez rapidement que je ne comprends pas. Je n'ai pas encore modifié la structure d'origine du code généré automatiquement. J'ai eu ce code pour travailler sur le site.Utilisation des types de données WCF

using ServiceReference.ServiceClient wcfClient = new ServiceReference.ServiceClient()) 
{ 
    string data = wcfClient.GetData(32); 
    Label1.Text += data; 
} 

Mais quand j'ai commencé à utiliser ce code, j'ai eu un problème.

ServiceReference.Kund kund; 

using (ServiceReference.ServiceClient wcfClient = new ServiceReference.ServiceClient()) 
{ 
    string data = wcfClient.GetDataUsingDataContract(kund); 
} 

J'ai reçu cette erreur. Je ne vois pas vraiment de problème avec le type de données, ce n'est pas une chaîne.

Impossible de convertir implicitement le type 'Webbshop.ServiceReference.Kund' à 'string'

Edit:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    string GetData(int value); 

    [OperationContract] 
    Kund GetDataUsingDataContract(Kund kund); 
} 

[DataContract] 
public class Kund 
{ 
    int iD; 
    [DataMember] 
    public int ID 
    { 
     get { return iD; } 
     set { iD = value; } 
    } 
} 

Répondre

1

Pouvez-vous nous montrer le contrat de service (cette interface IMyService, ou tout ça s'appelle dans ton cas) tu as ??

En règle générale, les exemples d'applications que le service WCF génère aura une méthode GetData qui retourne une chaîne, et une seconde méthode qui montre comment retourner un type de données complexe

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    string GetData(int value); 

    [OperationContract] 
    CompositeType GetDataUsingDataContract(CompositeType composite); 
} 

ici: la deuxième méthode - après vos modifications - renvoie un Kund. Bien sûr, si vous appelez cela deuxième méthode qui retourne un Kund, vous ne pouvez pas simplement affecter la totalité de votre Kund à une chaîne .... vous devez faire quelque chose comme:

ServiceReference.Kund kund; 

using (ServiceReference.ServiceClient wcfClient = new ServiceReference.ServiceClient()) 
{ 
    Kund returnedKund = wcfClient.GetDataUsingDataContract(kund); 

    // then assign whatever properties from `data` you need to your string ..... 
    string data = returnedKund.ID.ToString(); // or something..... 
} 
+0

Je seulement changé le type de données dans l'interface [ServiceContract] public interface IService { [OperationContract] string GetData(int value); [OperationContract] Kund GetDataUsingDataContract(Kund kund); // TODO: Add your service operations here } [DataContract] public class Kund { int iD; [DataMember] public int ID { get { return iD; } set { iD = value; } } } Frozendragon

+0

Maintenant, je vois le problème, j'essaie d'attribuer la valeur de retour à la chaîne, il est si évident, je l'ai manqué. xD – Frozendragon

+0

@Frozendragon: été là, fait cela - parfois c'est tellement flagrant, vous l'ignorez juste en essayant de comprendre :-) Ça nous arrive à tous, je suis sûr que :-) –

Questions connexes