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.rar

    Vielleicht 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


Anmelden zum Antworten