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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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