Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas. J'ai créé un service WCF qui renvoie une liste de clients de la base de données Northwind.Comment appeler les services WCF dans Silverlight?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;
namespace WCFSilverlight.Web
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Customers" in code, svc and config file together.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Customers : ICustomers
{
IEnumerable<Customer> ICustomers.GetAllCustomers()
{
NorthwindEntities objNorthwindEntities = new NorthwindEntities();
var query = from cust in objNorthwindEntities.Customers
select cust;
return query.ToList();
}
}
}
Et ceci est mon fragment de code App.xaml.cs: -
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
CustomersClient objCustomersClient = new CustomersClient();
objCustomersClient.GetAllCustomersCompleted += new EventHandler<GetAllCustomersCompletedEventArgs>(client_GetNameCompleted);
objCustomersClient.GetAllCustomersAsync();
}
void client_GetNameCompleted(object sender, GetAllCustomersCompletedEventArgs e)
{
MessageBox.Show(e.Result.ToString());
}
Si je ne me trompe pas les méthodes de Silverlight sont appelés de manière asynchrone. J'ai donc ajouté un gestionnaire d'événements pour le gérer, puis j'ai appelé la méthode pour récupérer les clients. Mais je ne reçois rien dans Messagebox. Plus loin quand j'essaye de garder un point d'arrêt sur client_GetNameCompleted
, il n'exécute jamais. Mais si je le garde en Application_Startup
, il l'exécute. Quel peut être le problème?
Expliquez-moi aussi si je le fais correctement? J'ai vu un exemple où une personne définit directement la fonction en utilisant des symboles étranges comme =>
.
EDIT 1: - Veuillez également m'expliquer ce qu'est e.UserState dans e. Que contient-elle et que puis-je faire avec?
EDIT 2: -: - Je reçois cette erreur http://img178.imageshack.us/img178/9070/53923202.jpg
Le service WCF fonctionne parfaitement, je l'ai testé la requête de lien. Il n'y a donc pas de problème avec la connexion Sql Server ou WCF. Quelque chose ne va pas avec mon client seulement.
Ceci est mon ServiceReference.ClientConfig: -
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ICustomers" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:50622/Customers.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ICustomers" contract="CustomerServ.ICustomers"
name="BasicHttpBinding_ICustomers" />
</client>
</system.serviceModel>
</configuration>
Pouvez-vous me dire maintenant ce qui est faux?
Merci à l'avance :)
Mise à jour: - Je lis dans google vous devez définir le mode de sérialisation à sens unique. Mais où est-ce que je mets ceci? Qu'est-ce que j'écris où?
Le e.Result doit être le type de IEnumerable que vous pourriez avoir à jeter en arrière. –
Jirapong
Enfin j'ai fait le chargement paresseux dans le concepteur et cela a fonctionné :) – TCM