irgendwo hab ich was falsch gemacht.
Ich bekomme noch immer den gleichen Fehler:
SerializationException wurde nicht behandelt
Die Assembly "TestServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" kann nicht gefunden werden.
Die gesamte Pipe samt TransferDaten habe ich in eine dll ausgelagert. Diese binde ich in beide Projekte ein.
Die Sub für den Server sieht so aus:
<System.Runtime.InteropServices.ComVisible(True)> _
Public Sub Serverstart()
Using PipeServer As New _
NamedPipeServerStream(PipeName, PipeDirection.InOut, _
maxNumberOfServerinstances, PipeTransmissionMode.Message, _
PipeOptions.Asynchronous)
ZeileAnzeigen("Server: --> warte auf Client..." & " PipeName = " _
& PipeName)
PipeServer.WaitForConnection()
ZeileAnzeigen("Server: --> verbunden")
PipeOn = True
While PipeOn
Try
If Not PipeServer.IsConnected Then Serverstart()
Using sr As New StreamReader(PipeServer), sw As New _
StreamWriter(PipeServer)
sw.AutoFlush = True
Dim temp As String = String.Empty
tcOut = Nothing
While (assign(temp, sr.ReadLine())) IsNot Nothing
ServerInput = temp
If ServerInput.Length > 0 Then RaiseEvent _
PropertyChanged(Me, ServerRequest)
If Not tcOut Is Nothing Then
Dim bf As New BinaryFormatter
bf.Serialize(PipeServer, tcOut)
End If
End While
ZeileAnzeigen("Server: --> Daten")
End Using
'End If
Catch ex As Exception
' kam Fehler bei beenden Client vor Server -->
' unterbrochene Pipe
ZeileAnzeigen("Server Fehler: --> " & _
ex.InnerException.ToString)
End Try
End While
ZeileAnzeigen("Server: --> beende")
End Using
PipeOn = False
End Sub und für den Client:
<System.Runtime.InteropServices.ComVisible(True)> _
Public Sub ClientStart(ByVal AnfrageString As String)
Using PipeClient As New NamedPipeClientStream(ServerName, PipeName, _
PipeDirection.InOut, PipeOptions.None, _
Security.Principal.TokenImpersonationLevel.Impersonation)
ZeileAnzeigen("Client: --> warte auf Server..." & "PipeName = " _
& String.Concat(ServerName, ",", PipeName))
PipeClient.Connect()
startTimer()
PipeOn = True
ZeileAnzeigen("Client: --> verbunden")
sw = New StreamWriter(PipeClient)
sw.AutoFlush = True
sw.WriteLine(AnfrageString)
ZeileAnzeigen("Client Anfrage: --> " & AnfrageString)
If Not PipeOn Then PipeClient.Close()
'Direkte Deserialisierung der empfangenen TC-Instanz
Dim bfc As New BinaryFormatter
Dim tc As TransferDaten = CType(bfc.Deserialize(PipeClient), _
TransferDaten)
If Not tc Is Nothing Then ClientInput = tc : RaiseEvent _
PropertyChanged(Me, ClientRequest) : TimeOut.Dispose()
PipeClient.Close()
ZeileAnzeigen("Client: --> beendet")
End Using
End Sub zum Fehler kommt es in der Zeile:
Dim tc As TransferDaten = CType(bfc.Deserialize(PipeClient),TransferDaten)
Die Transferdaten werden in der dll zusammengestellt:
Private tcOut As TransferDaten
Public TransferTyp As TransferTyp
Public TransferDataTable As DataTable
Public TransferString As String
Public TransferNumber As Decimal
Public TransferCount As Integer
Public Sub createTransferdata()
Try
tcOut = New TransferDaten
With tcOut
.Typ = TransferTyp
If Not String.IsNullOrEmpty(TransferString) Then .TString = _
TransferString
Select Case TransferTyp
Case NamedPipe.TransferTyp.Count
.TCount = TransferCount
Case NamedPipe.TransferTyp.Table
.CTable = TransferDataTable
Case NamedPipe.TransferTyp.Decimal
.TNumber = TransferNumber
End Select
End With
Catch ex As Exception
tcOut = Nothing
End Try
End Sub
Danke für die Hilfe
Gruß Christian |