Ik heb een remoted object gemaakt, en dat object moet feedback kunnen geven over wat hij aan het doen is naar de client die dat object gestart heeft.
Ik heb dit gedaan door een event te definieren in m'n 'remote class', echter, als ik dat event wil gebruiken (als in 'een eventhandler eraan hangen'), dan krijg ik een SystemArgumentException met de volgende message:
Relevante gedeeltes van de class waar m'n remote object een instance van is:
De code van m'n client, waarin ik dus zo'n remote object gebruik ziet er als volgt uit:
[/]
Iemand enig idee wat ik hier trouwens fout doe ?
Ik gebruik .NET 1.1, en ik weet dat je -als je in .NET 1.1 werkt, je rekening moet houden met bepaalde properties van je Channel ([rml][ .NET] Remoting : SecurityExceptions bij delegates[/rml]).
Mijn config-file die m'n channel etc... initializeert ziet er trouwens zo uit:
Config file van de client:
Config file op de server:
Wellicht dat ik in de config-file van de client ook wel een 'serverProvider' (zie bovenvermelde link naar een vorig topic van mij, daar creeër ik het channel via code, en specifieer ik ook op de client een serverprovider) moet specifieren, maar als ik dat doe, dan krijg ik een andere exceptie.
Ik heb dit gedaan door een event te definieren in m'n 'remote class', echter, als ik dat event wil gebruiken (als in 'een eventhandler eraan hangen'), dan krijg ik een SystemArgumentException met de volgende message:
De stacktrace zegt dit:Error binding to target method
Mijn code ziet er zo uit:at System.Delegate.InternalCreate(object target, string method, bool ignoreCase)
Relevante gedeeltes van de class waar m'n remote object een instance van is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class MyMigrator : MarshalByRefObject, IMigrator { private RemoteBatchReportProgressEventHandler _remoteProgressReport; public RemoteBatchReportProgressEventHandler RemoteProgressReport { get { return _remoteProgressReport; } set { _remoteProgressReport = value; } } // .... } |
De code van m'n client, waarin ik dus zo'n remote object gebruik ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
| // IMigrationBatchConfigReader is ook een remote object; dit is eigenlijk een factory // die een remoted IMigrator instance returned. IMigrationBatchConfigReader reader = (IMigrationBatchConfigReader)Activator.GetObject ( .... ); // Hier returned the reader een 'IMigrator' object. IMigrator migr = reader.CreateBatch(txtConfigFile.Text); // Hier treedt de exceptie op; als ik een event-handler aan m'n event wil hangen, dan krijg ik // bovenvermelde exceptie migr.RemoteProgressReport += new RemoteBatchReportProgressEventHandler( ... ); |
[/]
Iemand enig idee wat ik hier trouwens fout doe ?
Ik gebruik .NET 1.1, en ik weet dat je -als je in .NET 1.1 werkt, je rekening moet houden met bepaalde properties van je Channel ([rml][ .NET] Remoting : SecurityExceptions bij delegates[/rml]).
Mijn config-file die m'n channel etc... initializeert ziet er trouwens zo uit:
Config file van de client:
code:
1
2
3
4
5
6
7
8
9
10
11
| <system.runtime.remoting> <application name="Client"> <channels> <channel port="0" ref="http" useDefaultCredentials="true" > <clientProviders> <formatter ref="binary"/> </clientProviders> </channel> </channels> </application> </system.runtime.remoting> |
Config file op de server:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| <system.runtime.remoting> <customErrors mode="on"/> <application> <channels> <channel ref="http" useDefaultCredentials="true"> <serverProviders> <formatter ref="binary" typeFilterLevel="Full" /> </serverProviders> </channel> </channels> <service> .... |
Wellicht dat ik in de config-file van de client ook wel een 'serverProvider' (zie bovenvermelde link naar een vorig topic van mij, daar creeër ik het channel via code, en specifieer ik ook op de client een serverprovider) moet specifieren, maar als ik dat doe, dan krijg ik een andere exceptie.
https://fgheysels.github.io/