2009-04-25 7 views
1

Actuellement, je travaille sur une petite application dans asp.net mvc. C'est une sorte d'outil de localisation. Nos clients se connectent sur notre application et ils peuvent traduire les termes qui apparaissent dans nos applications qu'ils utilisent. Il est arrive comme ceci:asp.net mvc comme un service reposant et une application?

  1. connexion sur le site de localisation
  2. trouver et traduire certains termes par exemple le titre pour le bouton dans l'application « Catalogue »
  3. lancer l'application (par exemple, « catalogue » l'application de 2 .) et par les services Web de Web ils mettent à jour la base de données locale des termes avec ceux qui sont traduits

C'est notre vieille solution et cela fonctionne bien. Mais maintenant, je suis en train de refactoriser une application d'outil de traduction dans asp.net mvc et je pense, pourquoi nous avons une logique séparée (doublée) en mvc et dans les services web? Pourquoi nous ne pouvons pas utiliser seulement mvc comme un service web ... de cette façon, je n'ai qu'une seule logique (récupérer des éléments et mettre à jour) et nous n'avons pas besoin de créer un service web wcf ou quelque chose comme ça. Et le plus important, je n'ai pas les applications de bureau de maille avec la dépendance sur les DLL dans lesquelles j'ai cette logique.

Et maintenant la question. Qu'est-ce que je peux obtenir du contrôleur dans mvc, à l'exception des vues et JsonResults ... puis-je obtenir des collections de mes objets directement?

Ou plus simple question, comment je peux utiliser asp.net mvc comme un service web. Quelle est votre expérience?

acclamations Marko

Répondre

2

Cela dépend vraiment de vos besoins. Vous pouvez certainement utiliser une application ASP.NET MVC en tant que service de données, mais il semble que vous deviez extraire votre code partagé dans une bibliothèque commune et référencer cette bibliothèque dans les deux applications. Il y a certaines choses que les projets de services Web fournissent qui seraient plus difficiles simplement comme une action de contrôleur. (de/serialization, wsdl, etc ...)

+0

merci en fait, toutes les applications utilisent la même DLL qu'une couche de données, même mon application web ... et le mieux c'est que j'ai toutes mes actions de couche de données dans cette DLL, donc le code cela utilisera l'appel mvc en tant que service de l'autre côté utilisera le même code que j'utilise dans cette application mvc :) N'est-ce pas magnifique? :) à la vôtre – Marko

1

Cela dépend vraiment de ce que consommera votre service Web. Par exemple: jQuery consomme bien JsonResults parce que je peux renvoyer des objets complexes (avec des collections, des tableaux, des objets imbriqués, etc.) d'une action et que jQuery la désérialise en objet javascript pour utilisation dans le navigateur des clients. Bien sûr, vous perdez la sécurité des types avec le processus de sérialisation, mais c'est plutôt normal dans la plupart des services Web basés sur REST/SOAP. Si vous avez vraiment besoin du type de sécurité pour l'application consommatrice, respectez les règles WCF (ou similaire).

Je créerais juste un drapeau pour retourner une action en tant que Json. J'ai remarqué que quelques sites le font de cette façon. Supposons que vous avez cette action:

public ActionResult GetPeople() 
    { 
     IList<Person> result = svc.GetPeople(); 

     return View(result); 
    } 

Le résultat de cette action est normalement rendu dans une certaine vue. C'est super, mais si vous voulez utiliser l'action en tant que service Web, vous pouvez simplement changer à ceci:

public ActionResult GetPeople(string ajax) 
    { 
     IList<Person> result = svc.GetPeople(); 

     if (Convert.ToBoolean(ajax)) 
      return Json(result); 
     else 
      return View(result); 
    } 

..so si votre application consomme na pas l'esprit JSON sérialisé alors au lieu d'invoquer la requête GET comme cela http://domain.com/controller/GetPeople (comme un navigateur pour obtenir la vue), vous devez simplement ajouter le drapeau ajax comme si http://domain.com/controller/GetPeople?ajax=true pour retourner le Json. Un indicateur plus approprié peut être 'json' au lieu de 'ajax' - 'ajax' est commun car cette méthode est utilisée pour supporter les navigateurs de niveau inférieur pour des actions qui peuvent être appelées avec ajax.

J'ai pensé à ajouter ceci à mon application mvc pendant un moment mais je n'aime pas l'idée de modding chaque action avec ce drapeau et ajoute plus si des déclarations. Mon idée est de créer un attribut personnalisé pour décorer les actions pour lesquelles vous voulez cette fonctionnalité et l'attribut ajoute dynamiquement l'indicateur supplémentaire et renvoie conditionnellement les données du modèle au format JSON plutôt que ce qui a été spécifié à l'origine. Essayez.

Questions connexes