Avatar billede Droa Seniormester
01. oktober 2013 - 11:47 Der er 1 kommentar og
1 løsning

Problemer med IPC pipe lukket

Hej eksperter.. jeg har et mindre problem med IPC, jeg er ved at lege med IPC, da jeg skal lave en service til .Net 2.0

koden virker ikke helt som den skal.. når jeg starter den, virker den.. men når jeg genstarter, kan den ikke finde pipen, og siger "pipe lukket"


Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Ipc
Imports System.Security.Principal

Public Class TestService
    Public Property ipc As IpcRemoteObject
    Private Shared FILE_NAME As String = "C:\testfil.txt"

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Add code here to start your service. This method should set things
        ' in motion so your service can do its work
        ipc.Counter = ipc.Counter + 1
        ipc.text = "Startet"
        ipc.args = args
    End Sub

    Protected Overrides Sub OnStop()
        ' Add code here to perform any tear-down necessary to stop your service.
        ipc.text = "Stoppet"
    End Sub

    Protected Overrides Sub OnContinue()
        ipc.text = "Continued"
    End Sub

    Protected Overrides Sub OnPause()
        ipc.text = "Paused"
    End Sub

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()
        Try
            ' Add any initialization after the InitializeComponent() call.
            ' Get SID code for the EveryOne user
            Dim sid As SecurityIdentifier = New SecurityIdentifier(WellKnownSidType.WorldSid, Nothing)
            ' Get the NT account related to the SID
            Dim account As NTAccount = sid.Translate(GetType(NTAccount))

            Dim properties As New Hashtable()
            properties.Add("portName", "testport")
            properties.Add("exclusiveAddressUse", False)
            properties.Add("authorizedGroup", account.Value)
            Dim channel As New IpcServerChannel(properties, Nothing)
            ChannelServices.RegisterChannel(channel, True)
            ipc = New IpcRemoteObject()
            RemotingServices.Marshal(ipc, "status", GetType(IpcRemoteObject))
        Catch ex As Exception
            WriteToFile(ex.Message)
        End Try
    End Sub

    Public Sub WriteToFile(ByVal text As String)
        If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
            objWriter.WriteLine(text)
            objWriter.Close()
        End If
    End Sub
End Class
Avatar billede Droa Seniormester
01. oktober 2013 - 11:48 #1
Når jeg siger "Start" mener jeg under Service og Start, fafbryd midlertidigt virker os..

men genstart af computeren giver problemeer
Avatar billede Droa Seniormester
03. oktober 2013 - 10:56 #2
jeg fandt svaret i at læse
http://www.codeproject.com/Articles/14791/NET-Remoting-with-an-easy-example

jeg skal åbenbart "lease" objektet, ved at anmode et sponsor objekt, om tilladeslse..

Jeg satte serveren til at anmode om leasing til sig selv, for at ungå at objektet bliver fjernet af Garbage Collector.

Ideen er at finde ud af hvornår dataerne er vigtige, og hvornår det er okey at lave et nyt objekt.

det tog mig ret langt tid at finde noget omkring .Net 2.0 Remoting, så ville lige dele det med andre der havde samme problem som mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester