Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Remotingstrul?

Postades av 2005-09-15 14:37:03 - Marcus Agbrant, i forum c# (c-sharp), Tråden har 9 Kommentarer och lästs av 605 personer

Håller på att utveckla en applikation som kommunicerar med en windows service (på samma maskin). Kommunikationen sker med hjälp av Remoting.
Allt fungerar som det skall, förutom att Remotingen krachar ibland med följande felmeddelande:

"An unhandled exception of type 'System.Runtime.Remoting.RemotingException' occurred in mscorlib.dll

Additional information: Underlying socket was closed."

Breakar man efter krachen ser man att den fastnat när gör dett anropet till en metod i remoting objektet.

Efter en veckas letande på nätet och skruvande i koden har jag troligtvis inte kommit närmare en lösning än vad jag var från början.

Eftersom det finns så lite information om just detta felet misstänker jag att jag antingen har missat något väldigt uppenbart eller så är felet väldigt ovanligt.

Nedan följer den mesta av min kod. Skulle bli väldigt glad om ni kunde hjälpa mig att hitta vad som är galet.

---
Remotingen startas och körs i en Windows Service, så här sätts servern upp:

BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();

IDictionary props = new Hashtable();
props["port"] = 8085;

System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseTime = TimeSpan.FromSeconds(0);
System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseManagerPollTime = TimeSpan.FromSeconds(0);
System.Runtime.Remoting.Lifetime.LifetimeServices.RenewOnCallTime = TimeSpan.FromSeconds(0);
System.Runtime.Remoting.Lifetime.LifetimeServices.SponsorshipTimeout = TimeSpan.FromSeconds(0);
				
TcpChannel chan = new TcpChannel(props, clientProv, serverProv);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("Intro.DllRemoting.cRemoting,DllRemoting"), "SayHello", WellKnownObjectMode.Singleton);


När applikationen startar, körs följande metod för att koppla upp mot remotingen:

private void ConnectToServer()
{
	BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
	serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
	BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();

	IDictionary props = new Hashtable();
	props["port"] = 0;

	TcpChannel chan = new TcpChannel(props, clientProv, serverProv);
	ChannelServices.RegisterChannel(chan);

	remoteServer = (Intro.DllRemoting.cRemoting)Activator.GetObject(typeof(Intro.DllRemoting.cRemoting), "tcp://localhost:8085/SayHello");
	if (remoteServer == null) 
	{
		MessageBox.Show("Could not locate server\n Application will now exit.");
		Application.Exit();
	}
}


Detta är lite valda delar ur remoting klassen:

namespace Intro
{
	namespace DllRemoting
	{
		/// <summary>
		/// Summary description for CStuffToDo.
		/// </summary>
		public delegate void ShowLoading(string sLoadingMessage);
		public delegate void HideLoading();
		public delegate void AllDone(string sMessage);		


		/// <summary>
		/// This is the class that holds the diffrent methods that the client can run on the server via remoting.
		/// </summary>
		[Serializable]
		public class cRemoting : System.MarshalByRefObject
		{
			public event ShowLoading showLoadingEvent;
			public event HideLoading hideLoadingEvent;
			public event AllDone allDoneEvent;
			private Intro.DllCommunicationPhone.cCommands obCommands;
			private System.Threading.Thread obThread;
			private string sFoo;
			private ArrayList alFoo;
			private bool IsBusy;

			/// <summary>
			/// Constructor.
			/// </summary>
			public cRemoting()
			{
				obCommands =  null;
				obThread = null;
				showLoadingEvent = null;
				hideLoadingEvent = null;
				allDoneEvent = null;
				sFoo = "";
				EventLog.WriteEntry("Intro Windows Service", "Remoting Constructor");
			}


			public void ClearAllEvents()
			{
				this.allDoneEvent = null;
				this.hideLoadingEvent = null;
				this.showLoadingEvent = null;
			}


			public void TestWriteEvent(string sMessage)
			{
				EventLog.WriteEntry("Intro", sMessage);
			}

			/// <summary>
			/// Starts a testing command, that lasts for 8sec. 
			/// Returns "Klart" when done with testing.
			/// </summary>
			public void StartTesting()
			{

				bool bServerFree = CheckWorkLoad();
				if (!bServerFree)
				{
					return;
				}
				IsBusy = true;
				
				obThread = new System.Threading.Thread(new System.Threading.ThreadStart(this.Testing));
				obThread.Name = "Testing-thread";
				obThread.ApartmentState = System.Threading.ApartmentState.MTA;
				obTimer.Interval = 10000;
				obThread.Start();
				//obTimer.Start();
				if (showLoadingEvent != null)
				{
					this.showLoadingEvent.BeginInvoke("Testar Service...",null,null);
				}

			}

			/// <summary>
			/// Method that runs in the testing thread, all it does is sleeps the thread for 8 sec.
			/// </summary>
			private void Testing()
			{
				System.Threading.Thread.Sleep(8000);
						
				if (hideLoadingEvent != null)
				{
					this.hideLoadingEvent();
				}
				if (allDoneEvent != null)
				{
					
					this.allDoneEvent("Klart");
				}
				
				IsBusy = false;
			}
		}
	}
}


Svara

Sv: Remotingstrul?

Postades av 2005-09-15 20:45:12 - Oskar Johansson

Hur felmeddelandet ut? Vilken metod anropas?


Svara

Sv:Remotingstrul?

Postades av 2005-09-15 21:45:57 - Marcus Agbrant

Står ovan...


Svara

Sv: Remotingstrul?

Postades av 2005-09-15 22:11:22 - Oskar Johansson

Tänkte mer på hela felmeddelandet inkl. stacktrace


Svara

Sv:Remotingstrul?

Postades av 2005-09-16 10:53:33 - Marcus Agbrant

Stack trace:


************** Exception Text **************
System.Runtime.Remoting.RemotingException: Underlying socket was closed.

Server stack trace:
at System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[] buffer, Int32 offset, Int32 count)
at System.Runtime.Remoting.Channels.SocketHandler.BufferMoreData()
at System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes(Byte[] buffer)
at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

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 Intro.DllRemoting.cRemoting.StartGenerateKeyLists()
at Intro.DllFormsAdministerLocks.FormChangeLock.buttonSave_Click(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)


Svara

Sv: Remotingstrul?

Postades av 2005-09-16 13:38:05 - Oskar Johansson

När kraschar den? När som helst? När du ansluter?


Svara

Sv:Remotingstrul?

Postades av 2005-09-16 14:05:08 - Marcus Agbrant

<B>"Breakar man efter krachen ser man att den fastnat när gör dett anropet till en metod i remoting objektet."</B>

och det kan hända lite när som helst.


Svara

Sv: Remotingstrul?

Postades av 2005-09-16 23:47:38 - Oskar Johansson

Kraschar den precis efter anropet eller tar det några sekunder efter att anropet påbörjats tills att den kraschar? (Har lite svårt att hitta något i din kod som ser kraschbenäget ut :/ )


Svara

Sv:Remotingstrul?

Postades av 2005-09-19 09:44:33 - Marcus Agbrant

Det är lite svårt att svara på eftersom det inte är varje gång som den krashar,
men vad jag kan se så är det direkt vi anropet till metoden.


Svara

Sv: Remotingstrul?

Postades av 2005-09-19 14:33:27 - Fredrik Arenhag

Hej!

Jag håller på med ett liknande projekt (windows service som ska exponera en singleton-klass via remoting). Jag måste redan från början erkänna att jag inte har läst ingående om ditt problem, men en sak som slog mig som jag har läst om i min grundforskning avseende remoting är parametern "InitialLeaseTime" i remoting-configfilen.

Nu såg jag att du inte använder en config-fil utan kör det programmatiskt, men jag antar att man ändå kan speca "InitialLeaseTime".

Hur som helst - finessen med denna parameter (som jag tolkat / läst det) är att om man sätter den till noll (0) så kommer instansen som skapas vid första metodanropet aldrig att dö.

Vet inte om det kan hjälpa dig, men det kanske är en ledtråd iaf.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
1 171
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies