2010-06-01 2 views
3

Excusez le titre, mais c'est mieux que je viens d'expliquer le problème.Comment écrire un service web asmx sans utiliser le répertoire app_code?

J'ai 2 projets dans ma solution

  1. Une bibliothèque de classes
  2. Une application Web, qui se compose d'un service Web (.asmx).

le service Web a le code assis dans le dossier App_Code, avec un fichier [WebServiceName] .cs

A l'intérieur du code webservice derrière classe, j'ai une méthode web est ici un exemple échantillon (son simplifiée) :

[WebMethod] 
public EnumTaskExportState ProcessTask() 
{ 
    var tm = new UploadTaskManager(); 
    return tm.ProcessTask(); 
} 

maintenant, au moment de la conception, en studio visuel (2010 ou 2008), lorsque je clique droit sur UploadTaskMananger, puis sélectionnez « Aller à la définition ». Je suis amené à AppData \ Temp [une structure de dossier] ... etc .... et il affiche la définition de classe publique. Au lieu de cela je voudrais avoir une intégration complète, de sorte que je suis pris directement à la classe réelle dans le projet de la bibliothèque de classes. Je suppose que cela se produit parce que j'utilise la route app_code, et non un fichier compilé pour la classe de service Web. Mais je ne connais pas d'autre moyen de le faire.

Comment puis-je résoudre ce problème? Peut-être supprimer le besoin du répertoire app_code?

Répondre

2

Son assez facile

Étape 1 ... lorsque vous générez un nouveau service Web, le App_Code/fichier .cs est généré aussi. Copie la signature de cette classe, il sera utilisé comme modèle à l'étape 4.

Étape 2 ... supprimer le fichier App_Code/.cs qui a obtenu généré

Étape 3. Dans votre fichier de classe, créez une structure d'espace de noms et de dossiers dans laquelle vous inclurez les classes de service Web contenant des méthodes Web. Par exemple, Class1.WebServices

Étape 4. Class1.WebServices espace de noms (comme par exemple ci-dessus), créer une nouvelle classe, puis remplacer la signature de classe par défaut avec la signature de classe copié à l'étape 1.

Étape 5 . modifiez le service Web dès maintenant et créez vos méthodes Web

Étape 6. Dans l'application Web, modifiez le fichier asmx pour référencer la classe sans code derrière par exemple

<%@ WebService Language="C#" Class="Class1.WebServices.WebServiceClass" %> 

Etape 7, le test!

3

Vous devez créer un service Web à l'aide de Fichier-> Nouveau site Web. Je vous recommande fortement de ne jamais créer de service Web sur un site Web. Au lieu de cela, créez votre service Web en utilisant Fichier-> Nouveau projet et en sélectionnant "Application de service WCF". Si vous êtes bloqué à l'aide des services Web ASMX (que Microsoft considère désormais comme une "technologie héritée"), sélectionnez "Application de service Web ASP.NET".

Il s'agira à la fois de projets d'application Web et se comporteront comme tous les autres types de projets dans Visual Studio.

Entre autres choses, il n'y aura pas de dossier App_Code.

+0

+1 à aucun code d'application. Je n'ai pas vraiment eu le cœur de revoir la WCF, depuis la version 3.5, car le consensus général est que c'est trop compliqué (oui c'est nul). Quand je me sens à nouveau courageux, je vais vérifier WCF 4. - Voici ce que MS dit à propos de WCF 3.x - directement de la bouche des chevaux: La réalité est la configuration WCF devient généralement le plus coûteux d'utiliser WCF dans la pratique aujourd'hui et Une grande partie de cette complexité touche le personnel informatique/opérationnel qui n'est pas préparé à y faire face. –

+0

@JL: vous devez confondre Entity Framework avec WCF. Il n'y a pas de changements majeurs dans la version 4 - vous ne corrigez pas quelque chose de si proche de la perfection. Ce n'est pas compliqué si vous n'avez pas besoin de la complication. Créez vous-même un service "Bonjour, monde" et regardez le code. Ne prenez pas la peine de regarder chaque attribut de configuration - la configuration générée par défaut inclut des valeurs par défaut qui n'ont pas besoin d'être spécifiées. –

+0

@JL: quelle est la source de cette citation? Je n'ai pas trouvé que ce soit le cas dans la vraie vie. –

Questions connexes