2010-12-09 24 views
2

David Betz décrit dans son article comment créer référence à WCF sans utiliser l'option « Ajouter un service de référence »: http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2WCF de Silverlight sans utiliser Ajouter un service de référence

Une fois que le service WCF est créé, ce sont les déclarations dans le silverlight:

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
    EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Person.svc"); 
    IPersonService personService = new ChannelFactory<IPersonService>(basicHttpBinding, endpointAddress).CreateChannel(); 

...

Comment peut-on référence les types (telles que l'interface IPersonService) créés dans WCF de Silverlight quand je ne pas utiliser "Ajouter un service de référence" t o proxies Buid?

Répondre

2

L'idée est de faire référence à des ensembles qui contiennent des contrats de données WCF dans l'application silverlight, et de faire que vous avez besoin pour tromper VS il pense ensemble est un ensemble de SL, il décrit en détail ici

http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

et son pas si facile, voici ce qui doit être fait

Il suffit d'utiliser la même ildasm/Edition/ILAsm procédure déjà mentionné à dire l'assemblée d'utiliser leappropriéAssemblages Silverlight au lieu des assemblys .NET . Ceci est une procédure très simple consistant en rien de plus qu'un remplacement, une procédure que pourrait facilement être automatisée avec très effort minimal. Cela ne devrait pas vous prendre beaucoup de temps pour écrire une simple application .NET pour faire cela pour vous. Ce serait simplement un .NET à Silverlight convertisseur et le validateur (pour tester les assemblages non pris en charge dans Silverlight). Mettez cette application dans vos événements Post Build (l'un des top 5 des meilleures fonctionnalités de Visual Studio!) Et vous avez terminé. Pas de valeur hexadécimal binaire nécessaire à la recherche. Tout ce que vous faites est de changer deux paramètres documentés (la clé publique jeton et la version).

Deuxième solution est une solution de niveau fichier, vous utilisez ajouter l'option de lien sur les fichiers contenant vos contrats de données nécessaires mises en œuvre à SL et assurez-vous qu'ils ne contiennent que des types qui permettent de construire SL et à ne pas faire référence à un grand nombre d'ensembles externes , généralement ces conditions doivent être remplies pour les services WCF & contrats de données.

Je peux écrire plus, mais il serait juste la copier coller de ce lien

0

Vous avez également de diviser l'ensemble des déclarations de méthodes en vous IPersonService selon le modèle Async (BeginXXX/EndXXX) depuis Silverlight ne supporte que asyncronous WCF (même dans les discussions d'arrière-plan). Pour vous aider à le faire, vous pouvez ajouter une référence de service, puis copier IPersonService copié (toutes les méthodes seront découplées) à partir de Reference.cs. Ensuite, vous pouvez supprimer la référence.Cependant, si votre contrat de service est souvent modifié, vous devez répéter la procédure d'ajout de service, et à partir de cela, je dirais qu'il est plus simple d'utiliser la fonction Add-Service-Reference plutôt que de partager le contrat avec votre serveur d'applications.

0

Une seule chose que je voudrais détecter. Souvent, vous avez besoin dans les espaces de noms avec un support plus complexe de NET au sein de votre service WCF. Par conséquent, vous devez avoir les raisons réelles pour faire référence au sous-ensemble Silverlight dans votre service WCF (ou bibliothèque de services). Il y a plusieurs façons de utiliser ainsi nommé traditionnel façons par Ajouter référence de service. Ils sont présentés dans le bon article enter link description here.