Ik heb een Remoting Server draaien, met daarop een service, die een Huis-object aanmaakt. Deze service wordt door de client via een interface gebruikt. Dit werkt alemaal prima zolang de service 1 huis-object teruggeeft. Als ik een functie maak waarin een array van huis-objecten wordt teruggegeven dan krijg ik een melding:
"An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
Additional information: File or assembly name DistObjects, or one of its dependencies, was not found."
Heeft iemand al gewerkt met Remoting en Interfaces, en dan met name met het teurggeven van arrays van objecten?
De code in de Client is als volgt:
Dit werkt wel, hier wordt 1 enkel object verkregen:
Dit werkt niet, hier wordt een array van objecten verkregen:
Het gaat dus fout op de laatste regel: Huisje = objHS.GetArray("123 Somestreet")
Interface
DistObjects, wordt ook zonder errors allemaal uitgevoerd.
En natuurlijk de server waar alles op draait
"An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
Additional information: File or assembly name DistObjects, or one of its dependencies, was not found."
Heeft iemand al gewerkt met Remoting en Interfaces, en dan met name met het teurggeven van arrays van objecten?
De code in de Client is als volgt:
Dit werkt wel, hier wordt 1 enkel object verkregen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| Private Sub btnGet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGet.Click
Private objHS As IHomeService
ChannelServices.RegisterChannel(New TcpClientChannel())
objHS = Activator.GetObject(GetType(IHomeService), "tcp://localhost:8085/HomeService")
Dim Huis As IHuis
Huis = objHS.GetEenObject("123 Somestreet")
txtAddress.Text = Huis.Address
End Sub |
Dit werkt niet, hier wordt een array van objecten verkregen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Private objHS As IHomeService
ChannelServices.RegisterChannel(New TcpClientChannel())
objHS = Activator.GetObject(GetType(IHomeService), "tcp://localhost:8085/HomeService")
Dim Huisje() As IHuis
Huisje = objHS.GetArray("123 Somestreet")
End Sub |
Het gaat dus fout op de laatste regel: Huisje = objHS.GetArray("123 Somestreet")
Interface
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Public Interface IHomeService Function GetArray(ByVal Address As String) As IHuis() Function GetEenObject(ByVal Address As String) As IHuis End Interface Public Interface IHuis ReadOnly Property Address() As String End Interface |
DistObjects, wordt ook zonder errors allemaal uitgevoerd.
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
40
41
42
43
44
45
46
47
48
49
50
| Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Public Class HomeService
Inherits MarshalByRefObject
Implements IHomeService
Public Function GetArray(ByVal Address As String) As IHuis() Implements IHomeService.GetArray
Try
Dim homes1 As New Huis("1")
Dim homes2 As New Huis("4")
Dim huizen(1) As Huis
huizen(0) = homes1
huizen(1) = homes2
Return huizen
Catch
Throw New Exception("2")
End Try
End Function
Public Function GetEenObject(ByVal Address As String) As IHuis Implements IHomeService.GetEenObject
Dim homes As New Huis("1")
Return homes
End Function
End Class
<Serializable()> _
Public Class Huis
Inherits MarshalByRefObject
Implements IHuis
Private mstrAddress As String
Friend Sub New(ByVal Address As String)
mstrAddress = Address
End Sub
Public ReadOnly Property Address() As String Implements IHuis.Address
Get
Return mstrAddress
End Get
End Property
End Class |
En natuurlijk de server waar alles op draait
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Module Module1
Sub Main()
Dim mTcp As Tcp.TcpChannel
mTcp = New Tcp.TcpChannel(8085)
ChannelServices.RegisterChannel(mTcp)
RemotingConfiguration.RegisterWellKnownServiceType( _
GetType(HomeService), "HomeService", _
WellKnownObjectMode.SingleCall)
Console.WriteLine("Druk op enter om server af te sluiten.")
Console.ReadLine()
End Sub
End Module |