FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
- Qu'est-ce qu'un Web Service ?
- Les technologies évoluent, est-ce également le cas pour les Web Services ?
- Que contient le fichier .wsdl ? Est-il nécessaire ?
- WSE, quelle version pour qui ?
- Comment créer son premier Web Service ?
- Comment faire du tracing dans un Web Service ?
- Comment exposer une classe ?
- Comment utiliser l'héritage dans les Web Services ?
- Comment personnaliser les exceptions levées par les services Web ?
- Je reçois l'erreur "Visual studio has detected that the web server is running ASP.NET 1.0 the web application you are creating or opening can be configure to be compliant ASP.NET 1.1", que faire ?
- Comment générer un WSDL sans le générer pour un protocole particulier ?
- Comment définir dynamiquement la référence vers un WebService?
- Comment appeler une méthode Web sans attendre de réponse du serveur ?
Selon le W3C:
"Un service Web est un système logiciel conçu pour soutenir l'interaction de machine-à-machine de façon interopérable sur un réseau. Il fait décrire une interface dans un format compréhensible par toutes machines (spécifiquement WSDL). D'autres systèmes agissent réciproquement avec le service du Web dans une façon prescrite selon sa description utilisant des messages SOAP, typiquement transmise via HTTP avec une sérialisation XML en conjonction avec les autres normes (standards) Web."
Dans le cas des Web Services, on peut parler de WSE.
Derière cet acronyme se cachent simplement les mots : Web Service Enhancements (grossièrement traduit par Perfectionnements des Services Web). Il s'agit de suppléments apportés au SDK .NET afin de rester à jour avec les dernières spécifications des Services Web, ces dernières ayant beaucoup évolué ces dernières années. Ces compléments apportent également de nouveaux outils et des facilités de programmation aux développeurs.
Un document WSDL est un fichier XML définissant les services Web comme un ensemble d'opérations et de messages (arguments, types de données, …) reliés à des protocoles et des serveurs réseaux.
Le langage de description WSDL (Web Service Description Language) est une spécification issue de la problématique de la description des services Web. Il fallait une description des services Web qui puisse être comprise de tous les consommateurs, quelque soit leur plate-forme ou leur langage de programmation. Le but d'un document WSDL est donc de décrire dans un langage universel un service Web.
Les évolutions étant relativement fréquente, je vais vous donner ici les versions actuelles, mais pour avoir le dernier cri, n'hésitez pas à visiter le site Microsoft dédié aux Services Web.
Pour les utilisateurs de Visual Studio 2003, on optera pour WSE 2.0 Service Pack 3
Pour ceux qui auraient la joie de posséder Visual Studio 2005, on prendra le WSE 3.0 (A noter qu'il est compatible avec Windows Communication Foundation).
Pour créer un Service Web, vous pouvez utiliser l'assistant :
- Fichier-> Nouveau -> Projet
- Votre langage -> ASP.NET Web Service
Un premier Service Web vous sera ouvert à titre d'exemple, le bon vieux HelloWorld (Il suffit d'enlever les commentaires). Une petite compilation et votre premier Service Web est en place. Pour plus d'informations, rendez-vous dans la partie article de votre site préféré ;).
Malgré leur lien avec ASP.NET, les Services Web ne peuvent pas utiliser le TraceContext. Il reste donc le bon vieux duo Trace/TraceListener et les outils liés N4Log, etc.
On peut également très facilement utiliser les EventLogs à l'aide de la fonction statique
Microsoft.Web.Services2.Diagnostics.EventLog.WriteLine
(
"votre texte"
)
Pour qu'un Service Web expose votre classe, il faut préciser votre classe en valeur de retour à votre WebMethod. Le fichier WSDL sera généré automatiquement en fonction de votre classe pour autant qu'elle soit sérialisable.
[WebMethod]
public
MaClasse GetClasse
(
)
Pour pouvoir utiliser l'héritage, il " suffit " de définir la classe " mère " en valeur de retour à votre méthode et de définir grâce aux attributs les classes héritées pouvant être retournées par votre méthode.
[WebMethod]
[System.Xml.Serialization.XmlInclude(
typeof
(MaClasseDérivée))]
public
void
SetObjet
(
MaClasseMère maVariable)
{
return
;
}
La classe SoapException permet de personnaliser les exceptions en construisant une nouvelle instance avec un message décrivant l'exception.
[WebMethod(Description =
"Comment lever une exception personnalisée dans un service Web ?"
)]
public
int
Diviser
(
int
a,
int
b)
{
try
{
return
a /
b;
}
catch
(
DivideByZeroException ex)
{
throw
new
System.
Web.
Services.
Protocols.
SoapException
(
"La division par 0 est impossible"
,
_
SoapException.
ClientFaultCode,
Context.
Request.
Url.
AbsoluteUri,
ex);
}
}
Cette erreur arrive généralement lorsqu'on débute et que notre serveur IIS est éteint ou rencontre un problème lors de son démarrage. Suivant votre processus d'installation du framework .NET, il est parfois nécessaire d'enregistrer votre compte ASP.NET par la ligne de commande DOS suivante (démarrer-> exécuter)
%windir%\microsoft.net\framework\v1.1.4322\aspnet_regiis -i
Le numéro de version du framework devant être adapté à votre configuration.
Il arrive parfois que générer un WSDL utilisant un protocole trop récent pose quelques soucis. Dans ce cas, indiquez dans le web.config qu'il ne faut pas générer ce WSDL pour un ou plusieurs protocoles particuliers. Dans l'exemple ci-dessous, il s'agit de SOAP 1.2.
<system.web>
<webServices>
<protocols>
<remove name="HttpSoap12"/>
</protocols>
</webServices>
</system.web>
Lors du développement, ajoutez votre référence de manière tout à fait classique. Il est nécessaire pour connaître les méthodes exposées par le Web service.
Ainsi, dès que votre application connaît votre Web Service, peu importe où il se trouve. On peut donc lui assigner l'adresse du Web Service au runtime.
Dans le web.config, vous devez dès lors ajouter un ensemble clé / valeur nommé Service1Url et l'utiliser à l'aide du code suivant:
Service1 service =
new
Service1
(
);
service.
Url =
ConfigurationManager.
AppSettings[
"Service1Url"
];
Dans certains cas, le client ne veut pas attendre une réponse du serveur après avoir appelé un service Web. L'attribut OneWay indique au serveur que le client ne veut pas recevoir d'acquittements et que sa tâche s'arrête à l'appel de la méthode Web.
[
SoapDocumentMethod
(
OneWay =
true
)]
[WebMethod(Description =
"Comment appeler une méthode Web sans attendre une réponse du serveur ?"
)]
public
void
SaveToLog
(
string
logEntry)
{
EventLog FaqLog =
new
EventLog
(
"OneWayAttributeDemo"
);
FaqLog.
Source =
"OneWayAttributeDemo"
;
FaqLog.
WriteEntry
(
logEntry,
EventLogEntryType.
Information);
}