j'essaie de mettre en place un wcf en duplex à partir d'exemples simples.

Mon service est bien lancé sur mon host, mais lorsque j'essaie de le lancer depuis mon client, j'ai une erreur au niv"eau de la creation du channel. Il m'indique que la fonction callback n'est pas implémentée.
Mon interface:
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
Imports System.ServiceModel
 
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required, CallbackContract:=GetType(ICalculatorDuplexCallback))> _
Public Interface ICalculatorDuplex
    <OperationContract(IsOneWay:=True)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub DivideBy(ByVal n As Double)
End Interface
 
 
Public Interface ICalculatorDuplexCallback
    <OperationContract(IsOneWay:=True)> _
    Sub Equals(ByVal result As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub Equation(ByVal eqn As String)
End Interface
Mon service:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
Option Explicit On
 
Imports System.Data.Odbc
Imports System.Collections.Generic
Imports System.Threading
Imports System.ServiceModel
Imports DevInterface
 
Public Class CalculatorService
    Implements ICalculatorDuplex
    Private result As Double = 0.0R
    Private equation As String
 
    Public Sub New()
        equation = result.ToString()
    End Sub
 
    Public Sub Clear() Implements ICalculatorDuplex.Clear
        Callback.Equation(equation & " = " & result.ToString())
        equation = result.ToString()
    End Sub
 
    Public Sub AddTo(ByVal n As Double) Implements ICalculatorDuplex.AddTo
        result += n
        equation &= " + " & n.ToString()
        CType(Callback, Object).Equals(result)
    End Sub
 
    Public Sub SubtractFrom(ByVal n As Double) Implements ICalculatorDuplex.SubtractFrom
        result -= n
        equation &= " - " & n.ToString()
        CType(Callback, Object).Equals(result)
    End Sub
 
    Public Sub MultiplyBy(ByVal n As Double) Implements ICalculatorDuplex.MultiplyBy
        result *= n
        equation &= " * " & n.ToString()
        CType(Callback, Object).Equals(result)
    End Sub
 
    Public Sub DivideBy(ByVal n As Double) Implements ICalculatorDuplex.DivideBy
        result /= n
        equation &= " / " & n.ToString()
        CType(Callback, Object).Equals(result)
    End Sub
 
    Private ReadOnly Property Callback() As ICalculatorDuplexCallback
        Get
            Return OperationContext.Current.GetCallbackChannel(Of ICalculatorDuplexCallback)()
        End Get
    End Property
End Class
Mon client:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Option Explicit On
Option Strict On
 
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports DevInterface
 
<ServiceBehavior(InstanceContextMode:=ServiceModel.InstanceContextMode.PerSession)> _
Public Class ClientForm
 
 
    Private Sub btConvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btconvert.Click
 
        Dim myChannelFactory As ServiceModel.ChannelFactory(Of DevInterface.ICalculatorDuplex) = Nothing
        Dim myService As DevInterface.ICalculatorDuplex
        'Construct InstanceContext to handle messages on callback interface
        ' Construct InstanceContext to handle messages on callback interface
        Dim instanceContext As New InstanceContext(New CallbackHandler())
 
 
 
 
        'Try
 
        'myChannelFactory = New ServiceModel.ChannelFactory(Of DevInterface.IServiceDev)("ConfigurationHttpCurrency")
        'myService = myChannelFactory.CreateChannel()
        myChannelFactory = New ServiceModel.DuplexChannelFactory(Of DevInterface.ICalculatorDuplex)("ConfigurationHttpCurrency")
        myChannelFactory.Endpoint.Address = New EndpointAddress("http://localhost:8018/CurrencyService")
        myService = myChannelFactory.CreateChannel()
        ' Call the AddTo service operation.
        Dim value As Double = 100
 
        myService.Clear()
        myService.AddTo(value)
 
        ' Call the SubtractFrom service operation.
        value = 50
        myService.DivideBy(value)
 
        ' Call the MultiplyBy service operation.
        value = 17
        myService.MultiplyBy(value)
 
        ' Call the DivideBy service operation.
        value = 2
        myService.SubtractFrom(value)
 
    End Sub
 
 
End Class
 
Public Class CallbackHandler
    Implements ICalculatorDuplexCallback
    Public Overridable Shadows Sub Equals(ByVal result As Double) Implements ICalculatorDuplexCallback.Equals
        Console.WriteLine("Equals({0})", result)
    End Sub
 
    Public Sub Equation(ByVal eqn As String) Implements ICalculatorDuplexCallback.Equation
        Console.WriteLine("Equation({0})", eqn)
    End Sub
End Class
et enfin mes fichier config
Host:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="DevService.CalculatorService">
        <endpoint
            address="http://localhost:8018/CurrencyService"
            binding="wsDualHttpBinding"
            contract="DevInterface.ICalculatorDuplex" />
      </service>
    </services>
  </system.serviceModel>
</configuration>
et client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint
        address="http://localhost:8018/CurrencyService"
        binding="wsDualHttpBinding"
        contract="DevInterface.ICalculatorDuplex"
        name="ConfigurationHttpCurrency" />
    </client>
  </system.serviceModel>
</configuration>
j'ai surement mal placé une partie du code, mais je n'arrive pas à savoir laquelle