2009-09-02 8 views
2

J'essaie d'écrire un assembly .NET réutilisable qui implémente WCF. Mon problème actuel est comment prendre l'assembly (décoré de manière appropriée avec les attributs ServiceContract, DataContract et WebGet) et le référencer dans mon application ASP.NET WebForms existante et l'exposer à l'aide de REST.Comment implémenter WCF REST dans ASP.NET

Idéalement, j'apprécie les différents points de terminaison pour les services Web Bare XML, JSON et SOAP compatibles avec JQuery, mais pour le moment, je serais content de travailler avec Bare XML. En ce moment tout ce que je reçois est 404 ressource ne peut être trouvé).

Un autre problème est que l'API a plusieurs méthodes. En tant que tel, il va être pénible d'avoir à créer un fichier svc qui enveloppe l'ensemble.

Voici mon system.serviceModel dans mon web.config

Alors, une fois que je reçois cela fonctionne, Je pourrais alors théoriquement écrire une application .NET Console qui héberge cet assembly sur netTcp.

Le seulement 3 façons que j'ai trouvé pour mettre en œuvre ce sont Je suis venu avec 3 façons de le faire

    Créer un nouveau fichier qui enveloppe svc appels autour de mon `WcfService1.WcfService` et met en œuvre `WcfService1.ITest` et en mettant l'attribut Factory approprié dans le balisage. C'est pas souhaitable du tout. L'autre approche consiste à créer quelque part une classe `WebServiceHost` (est-ce que j'utilise Global.asax?), Même si je ne sais pas comment le faire, ou si c'est une solution valide du tout.
    Utilisez ASP.NET MVC pour implémenter une solution, bien que je pense que les mêmes problèmes que l'approche svc viendront à jouer.

Merci d'avance pour toute aide.

Répondre

2

Vous devez essentiellement deux choses:

  • créer et compiler votre service dans un ensemble
  • trouver un moyen d'héberger ce service (dans IIS, auto-hébergement dans l'application de la console)

Je crois que vous avez déjà fait l'étape 1, alors maintenant vous devrez décider où héberger cette chose.

Hébergement dans IIS
Dans ce cas, vous devez créer un fichier « MyService.svc » quelque part dans un répertoire virtuel et spécifiez le « WebServiceHostFactory » comme son usine d'accueil - c'est tout!

Créer un fichier "MyService.svc » dans un répertoire virtuel quelque part, et utiliser ce contenu:

<%@ ServiceHost Language="C#" Debug="True" 
    Service="YourNamespace.YourService" 
    Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

Cela devrait être tout ce que vous devez faire - le nouveau .NET 3.5 WebServiceHostFactory prend soin de tout le reste

auto-hébergement.
Dans ce cas, vous devez créer un EXE hôte - soit une application console ou un service Windows a l'intérieur, vous souhaitez instancier le WebServiceHost et charger votre classe de service - qui est essentiellement tout ce qu'il ya.

WebServiceHost wsh = 
    new WebServiceHost(typeof(YourNamespace.YourService), 
        new Uri("http://localhost/YourServiceBaseUrl")); 
wsh.Open(); 

Alors, où est votre problème? :-) Vous êtes-vous déjà décidé à héberger? Une fois votre service REST opérationnel, l'application et le projet doivent pouvoir l'utiliser en accédant à l'URL du service de base, soit celle que vous avez spécifiée lors de la création de WebServiceHost et en l'ouvrant dans votre propre hébergement. le chemin du répertoire virtuel où votre vie de fichier MyService.svc (y compris le fichier * .svc - par exemple, quelque chose comme

http://localhost/VirtualDir/YourService.svc 

Il y a un très bon screencast series by Aaron Skonnard disponible en ligne qui montre les différents aspects du kit de démarrage WCF REST et comment l'utiliser dans vos projets très facilement.Très recommandé!

Marc

Questions connexes