2010-02-08 5 views
1

J'ai créé le service Web WCF, l'ai déployé et l'ai débogué. J'ai écrit une application de console, référencé le service web, et tout fonctionne.Méthodes manquantes du service Web à l'appel de Silverlight

Maintenant, j'essaie de consommer le service Web dans une application Silverlight 3. J'ai ajouté le code suivant à un événement click. VS me dit qu'il ne trouve pas les méthodes GetTags() et Close(). Mais VS n'a aucun problème avec ces méthodes dans l'application console.

J'ai ajouté une instruction using pour la référence de service au début de mon fichier.

J'ai placé un fichier clientaccesspolicy.xml dans le domaine racine et dans le dossier contenant le service Web. Ne semble pas changer quoi que ce soit, peu importe où c'est.

Que se passe-t-il? Aucune suggestion? C'est la première fois que je consomme un service Web dans Silverlight, il se peut que je manque quelque chose.

Répondre

2

Vous devrez générer un nouveau proxy client à utiliser dans l'application Silverlight - IOW, à partir de l'application Silverlight, ajouter une nouvelle référence de service et la diriger vers le service.

Vous verrez alors que les choses sont un peu différentes - vous trouverez qu'il y a des méthodes asynchrones dans le proxy, pas celles synchrones que vous aurez vu dans le proxy généré pour l'application de la console. Donc, dans l'application silverlight, votre code finira recherche quelque chose comme ceci:

client.GetTagsCompleted += [my event handler]; 
client.GetTagsAsync(); 

et dans votre gestionnaire d'événements:

if (e.Error == null) 
    if (!e.Cancelled) 
     List<Tag> tags = new List<Tag>(e.result); 

Lorsque vous ajoutez une référence de service à l'application silverlight, assurez-vous vous avez un problème avec les paramètres avancés, car vous pouvez changer le type de collection dans lequel les éléments sont retournés, etc (la collection de retour par défaut est un ObservableCollection<T>). Si vous voulez éviter ce genre de choses (différents proxys pour différentes applications ou modules), pensez à utiliser svcutil pour générer votre proxy au lieu de permettre à VS de le faire (VS n'utilise pas svcutil).

Questions connexes