WCF OperationContract and specified parameter
Bonjour,
Je vais tout d'abord exposer du départ ce que j'ai entrepris.
Mon but est de faire un site web relié à une base de données SQL SERVER.
Dans la version actuelle, toute mes méthodes de lecture et de MAJ des données sont placées dans une DLL que j'utilise via mes différents outils périphériques (un extranet, un intranet , et une application Winform).
Ainsi, toute modification de structure de la SGBD nécessite une adaptation de la DLL.
L'idée d'utiliser un service web data me parait une solution plus souple pour l'architecture de mon projet.
J'ai créé un projet de type WEB SERVICE WCF à partir de VS2010 (Win 7(x64)).
J'ai alimenté le fichier Interface :
Code:
1 2 3 4
| Public Interface IMBLib
<OperationContract()>
Function GetLangue(<br/> ByVal idLangue As Int32 _<br/>, ByVal ORDER As String, ByVal WHERE As String) As DataSet<br/>
End Interface |
Puis la CLASS :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Option Explicit On
Option Strict On
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.IO.Compression
Imports System.ComponentModel.Component
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports MBThumb
Public Class MBLib
Implements IMBLib
Dim acc As AccesBase
Public Sub New()
acc = New AccesBase(ConfigurationManager.ConnectionStrings("MBConnectionString").ConnectionString)
End Sub
Protected Overrides Sub Finalize()
acc.Dispose()
acc = Nothing
MyBase.Finalize()
End Sub
Function GetLangue( _<br/> ByVal idLangue As Int32 _<br/> , ByVal ORDER As String, ByVal WHERE As String) As DataSet Implements IMBLib.GetLangue<br/> Dim strSQL As String<br/> strSQL = "SELECT * FROM Vtbl_AS_Langue"<br/> strSQL = strSQL & " WHERE 1=1 "<br/> If idLangue <> 0 Then<br/> strSQL = strSQL & " AND idLangue = " & idLangue<br/> End If
If WHERE <> "" Then<br/> strSQL = strSQL & " AND " & WHERE<br/> End If<br/> If ORDER <> "" Then<br/> strSQL = strSQL & " ORDER BY " & ORDER<br/> Else<br/> strSQL = strSQL & " ORDER BY CodeLangue"<br/> End If<br/> Return acc.GetDataSet(strSQL)<br/> End Function<br/> End Class |
Le WEB.Config du service est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="MBConnectionString" connectionString="Data Source=MB-W764\SQLEXPRESS;Initial Catalog=Chastra_ADM;Integrated Security=True"/>
</connectionStrings>
<system.web>
<compilation debug="true" strict="true" explicit="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies></compilation>
<pages>
<namespaces>
<add namespace="System.Runtime.Serialization"/>
<add namespace="System"/>
<add namespace="System.ServiceModel"/>
<add namespace="System.ServiceModel.Web"/>
</namespaces>
</pages>
</system.web>
<system.serviceModel >
<behaviors>
<serviceBehaviors>
<behavior >
<!-- Pour éviter la divulgation des informations sur les métadonnées, définissez la valeur ci-dessous sur false et supprimez le point de terminaison des métadonnées ci-dessus avant le déploiement -->
<serviceMetadata httpGetEnabled="true"/>
<!-- Pour recevoir les détails d'exception des erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Définissez-la sur false avant le déploiement pour éviter la divulgation des informations d'exception -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration> |
Côté client, j'ai utilisé un site WEB ASP.Net auquel j'ai ajouté une web référence sur le service précédent sous le nom "WCF_Lib".
Code:
1 2 3 4 5 6 7 8 9 10
| Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim acc As New WCF_MBLib.MBLib
Dim dsLngSite As DataSet = acc.GetLangue(0, False, "", "(Site=1)")
...
dsLngSite.Dispose()
acc.Dispose() : acc = Nothing
End Sub |
A ce niveau, GetLangue n'a plus les mêmes paramètres que ceux déclarés dans le service.
Dans l'explorateur de classe je vois ça :
Code:
1 2
| Public Function GetLangue(ByVal idLangue As Integer, ByVal idLangueSpecified As Boolean,
ByVal ORDER As String, ByVal WHERE As String) As System.Data.DataSet |
idLangueSpecified a été ajouté
Pourquoi? et comment résoudre ce problème s'il vous plait?
Merci