Bekomm die Krise mit einem RemoteObjekt
-
Hallo Leute...
ich habe ein Problem mit einem Remote Objekt. Vielleicht seht ihr den Fehler:
Einbindung
try { //Initialize Singleton object proxy string mySingletonUrl = ConfigurationSettings.AppSettings ["MyRemoteSingletonServiceUrl"]; RemOb = (MyService) Activator.GetObject(typeof(MyService), mySingletonUrl); //Initialize SingleCall object proxy string mySingleCallUrl = ConfigurationSettings.AppSettings ["MyRemoteSingleCallServiceUrl"]; } catch(Exception ex) { MessageBox.Show(ex.Message); }
Konfigurationsfile:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="MyRemoteSingletonServiceUrl" value="tcp://localhost:8989/MyRemoteObject/MySingleton.rem"/> </appSettings> </configuration>
Header des RemoteObjekts:
namespace MyRemoteObject { /********************************************************** This class will be made available to the clients thru .NET remoting. **********************************************************/ public class MyService: MarshalByRefObject
Fehlermeldung:
************** Exception Text ************** System.Runtime.Remoting.RemotingException: Requested Service not found Server stack trace: at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at MyRemoteObject.MyService.NewSignal(Int64 wert) at MoSysSimWare.MainForm.AddValue(Int64 x) at MoSysSimWare.MainForm.B1Click(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Loaded Assemblies ************** mscorlib Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll ---------------------------------------- MoSysSimWare Assembly Version: 1.0.2718.40397 Win32 Version: 1.0.2718.40397 CodeBase: file:///G:/DatenPfad/dirk.moll/SharpDevelop%20Projects/Release/MoSysSimWare.exe ---------------------------------------- System.Windows.Forms Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll ---------------------------------------- System Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll ---------------------------------------- MyRemoteObject Assembly Version: 1.0.2718.40179 Win32 Version: 1.0.2718.40179 CodeBase: file:///G:/DatenPfad/dirk.moll/SharpDevelop%20Projects/Release/MyRemoteObject.DLL ---------------------------------------- LogWriter Assembly Version: 1.0.2705.29643 Win32 Version: 1.0.2705.29643 CodeBase: file:///G:/DatenPfad/dirk.moll/SharpDevelop%20Projects/Release/LogWriter.DLL ---------------------------------------- System.Drawing Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll ---------------------------------------- System.Xml Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll ---------------------------------------- System.Runtime.Remoting Assembly Version: 1.0.5000.0 Win32 Version: 1.1.4322.2032 CodeBase: file:///c:/windows/assembly/gac/system.runtime.remoting/1.0.5000.0__b77a5c561934e089/system.runtime.remoting.dll ---------------------------------------- ************** JIT Debugging ************** To enable just in time (JIT) debugging, the config file for this application or machine (machine.config) must have the jitDebugging value set in the system.windows.forms section. The application must also be compiled with debugging enabled. For example: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> When JIT debugging is enabled, any unhandled exception will be sent to the JIT debugger registered on the machine rather than being handled by this dialog.
Ich bekomm das Grausen damit, such nun schon seit drei Tagen nach dem Fehler...
Vielleicht weis einer von Euch weiter.
Salü
JS
-
Den entscheidenden Part hast Du natürlich weggelassen... Die Initialisierung des Remote-Objektes innerhalb de myService-class...
-
skals schrieb:
Den entscheidenden Part hast Du natürlich weggelassen... Die Initialisierung des Remote-Objektes innerhalb de myService-class...
^
stimmt, sorry.
Client:
using System; using System.IO; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.Configuration.Install; using System.Runtime.Remoting; using LogWrite; namespace RemoteServerDienst { public class RemoteServerDienst : System.ServiceProcess.ServiceBase { private LogWriter lw = new LogWriter(); private string MyName = "RemoteService 2.0"; public RemoteServerDienst() { try { InitializeComponents(); } catch(Exception e) { lw.Write(1, MyName, "Dienst kann nicht gestartet werden!", e); } } private void InitializeComponents() { this.ServiceName = "MoSys 2.0 RemoteService"; } public static void Main() { System.ServiceProcess.ServiceBase.Run(new System.ServiceProcess.ServiceBase[] { new RemoteServerDienst() // To run more than one service you have to add them here }); } protected override void Dispose(bool disposing) { try { base.Dispose(disposing); } catch(Exception e) { lw.Write(1, MyName, "Funktion Dispose meldet einen Fehler", e); } } protected override void OnStart(string[] args) { try { RemotingConfiguration.Configure(@"C:\MoSysWorkSpace\RemoteServer.exe.config"); lw.Write(0, MyName, "RemoteObject wurde eingebunden!"); lw.Write(0, MyName, "RemoteService wurde gestartet!"); } catch(Exception e) { lw.Write(1, MyName, "Funktion OnStart meldet einen Fehler", e); lw.Write(0, MyName, "RemoteService wurde nicht gestartet!"); } } protected override void OnStop() { lw.Write(0, MyName, "Service wurde angehalten!"); } } } [RunInstaller(true)] public class ProjectInstaller : Installer { public ProjectInstaller() { ServiceProcessInstaller spi = new ServiceProcessInstaller(); spi.Account = ServiceAccount.LocalSystem; ServiceInstaller si = new ServiceInstaller(); //si.ServiceName = "RemoteServerDienst"; si.DisplayName = "MoSys 2.0 RemoteService"; si.ServiceName = "MoSysRemoteService"; si.StartType = ServiceStartMode.Automatic; Installers.AddRange(new Installer[] {spi, si}); } }
-
Besser wäre es, wenn Du gleich auf neue Technologien setzt, also kein Remoting, sondern Windows Communication Foundation (WCF) http://de.wikipedia.org/wiki/Windows_Communication_Foundation
-
skals schrieb:
Den entscheidenden Part hast Du natürlich weggelassen... Die Initialisierung des Remote-Objektes innerhalb de myService-class...
Projekt-Dateien stehen für weitere Infos auf meinem Server:
http://www.fachinformatikerzone.de/SharpDevelopProjects.rarVielleicht ist das einfacher wenn man durch die komplette Source schauen kann.
-
Wird mir grad zuviel arbeit, daher etwas Code wie ich es benutze:
Remote-Objekt:
public class ServiceClient : MarshalByRefObject, IServiceClient { // mit der init-funktion wird das Remote-Object sichtbar public void init() { RemotingServices.SetObjectUriForMarshal(this, "IchBinEinRemoteobject" ); RemotingServices.Marshal(this); } [...] }
Um das Objekt dann zu finden benutze ich:
Activator.GetObject(typeof(MyService), "tcp://localhost:8989/IchBinEinRemoteobject");
Ach ja, es muss auch ein Channel existieren, z.B. so:
HashTable Props = new HashTable() // Props initialisiern nicht vergessen BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider(); BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider(); serverProvider.TypeFilterLevel = TypeFilterLevel.Full; MyTcpChannel = new TcpChannel(Props, clientProvider, serverProvider); ChannelServices.RegisterChannel(MyTcpChannel, false);
Weil Remoting-Objekte sozusagend nur innerhalb eines Channels leben.
Hab leider grad nicht mehr Zeit...
-
Brauch ich dann noch die *.exe.config Datei?
-
skals schrieb:
Wird mir grad zuviel arbeit, daher etwas Code wie ich es benutze:...
Hi Skal,
krieg nicht mal die Using-Anweisungen zustande. Welcher Namespace ist mit HashTable und den anderen aus dem letzten Code-Block?
Hab nun so lange an dem Problem gesessen das ich das Gefühl habe keine Ahnung mehr von c# zu haben. Was war noch mal C#?
LG JS