Vous êtes sur la page 1sur 8

Labs ASP.NET v1.

1 Aurélien Norie & Sébastien Bovo [Microsoft]

Lab12

But du Lab

Le but de ce Lab est de créer et consommer des Services Web plus complexes : gestion
des erreurs, retour de types complexes…

Exercice 1 – Gestion des erreurs d’un Service Web

- Dans Visual Studio .NET, créer un nouveau projet de Service Web


o Fichier > Nouveau > Projet
o Types de projets : choisir « Projets Visual Basic »
o Modèles : choisir « Service Web ASP.NET »
o Nom du projet : « http://localhost/12VBServiceWebAvance »

- Dans le service « Service1.asmx », ajouter :


Imports System.Web.Services.Protocols

- Créer une nouvelle WebMethod appelée « Division ». En cas de division par 0, la


méthode lève une exception SOAP :
<WebMethod()> Public Function Division(ByVal a As Double, ByVal b As
Double) As Double
If b <> 0 Then
Return a / b
Else
'On lève l'exception SOAP
Throw New SoapException("Division par zero",
SoapException.ClientFaultCode)
End If
End Function

- Compiler la solution

- Ouvrir une nouvelle instance de Visual Studio .NET.


- Créer une application Windows VB.NET pour accéder à ce service Web.
- Nommer cette application « 12VBConsommationServiceWebAvance »
- Sur le « Form1 », ajouter 2 TextBox et un Bouton :

Page 1 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

- Ajouter une référence Web vers le Service Web créé à l’étape précédente.
Nommer cette référence « SWAvance ».
- Double-cliquer sur le bouton et ajouter le code pour appeler la méthode
« Division » du Service Web. Encapsuler cet appel dans un « Try… Catch » afin de
gérer l’exception SOAP en cas de division par zéro :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Try
Dim MyService As New SWAvance.Service1
MessageBox.Show(MyService.Division(Double.Parse(TextBox1.Text),
Double.Parse(TextBox2.Text)).ToString)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

- Faire un appel de la méthode avec 0 dans le deuxième TextBox


- Constater l’exception récupérée côté client.

Page 2 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

Exercice 2 – Transmettre un flux XML

- Ajouter la WebMethod suivante à votre Service Web. Cette méthode retourne le


fichier Web.Config du Service Web à l’application appelante :
<WebMethod()> Public Function GetXMLFile() As System.Xml.XmlElement
Dim xd As System.Xml.XmlDataDocument = New System.Xml.XmlDataDocument
xd.Load(Server.MapPath("Web.config"))
Return xd.DocumentElement
End Function

- Compiler le Service Web

- Dans l’application Windows cliente, ajouter un nouveau bouton :

- Mettre à jour la classe Proxy afin de pouvoir appeler la nouvelle WebMethod. Pour
cela, cliquer droit sur la référence Web « SWAvance » et sélectionner « Mettre à
jour la référence Web »

Page 3 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

- Double-cliquer sur le nouveau bouton et appeler la méthode « GetXMLFile » du


Service Web :
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim MyService As New SWAvance.Service1
Dim myXML As System.Xml.XmlElement
myXML = MyService.GetXMLFile()
MessageBox.Show(myXML.InnerXml())
End Sub

- Compiler et constater que le fichier XML est récupéré par l’application Windows.

Page 4 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

Exercice 3 – Transmettre une image

- Copier le fichier « Trafic.bmp ci-joint dans le répertoire


« C:\Inetpub\wwwroot\12VBServiceWebAvance »

C:\trafic.BMP

- Dans le Service Web, cliquer sur le menu « Projet / Ajouter une référence… »
- Choisir l’onglet « .NET » et double-cliquer sur « System.Drawing.dll »
- Cliquer sur « OK »

Page 5 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

- Ajouter une nouvelle WebMethod au Service Web :


<WebMethod()> Public Function GetImage() As String
Try

'Récupère le chemin physique de l'image


Dim nomFichier As String =
Server.MapPath("/12VBServiceWebAvance/trafic.bmp")

'Charge l'image en mémoire


Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream
Dim bm As System.Drawing.Bitmap = New
System.Drawing.Bitmap(nomFichier)

'Transformation de l'image en Jpeg


bm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
'Convert le flux binaire en flux text en base 64
Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)

Catch e As Exception
Return e.Message
End Try
End Function

- Compiler le Service Web

- Dans l’application Windows cliente, mettre à jour la référence Web.


- Ajouter un Bouton et un PictureBox :

Page 6 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

- Définir la propriété « SizeMode » du contrôle PictureBox à « StretchImage » afin


que l’image se mette automatiquement à la taille du contrôle PictureBox.
- Double-cliquer sur le bouton et ajouter le code :
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click

Dim MyService As New SWAvance.Service1


'Création d'un espace mémoire réceptacle de l'image
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream
'Réception de l'image et convertion de base 64 en binaire
Dim ba As Byte() = Convert.FromBase64String(MyService.GetImage())
'Ecriture dans le réceptacle mémoire
ms.Write(ba, 0, ba.Length)
'Affichage de l'image
PictureBox1.Image = New Bitmap(ms)
End Sub

- Compiler et exécuter l’application.

Page 7 sur 8
Labs ASP.NET v1.1 Aurélien Norie & Sébastien Bovo [Microsoft]

Page 8 sur 8