2012-11-01 2 views
1

VB2008을 사용하여 통신 할 필요가있는 2 대의 컴퓨터에 2 개의 응용 프로그램이 있습니다. 나는 명명 된 파이프를 설치하고 지금까지 작동하고 있습니다. 나는이 두 프로그램 사이에서 앞뒤로 문자열을 보낼 수있다.VB.net에서 명명 된 파이프를 통해 클래스를 보내는 방법

이제 클래스 나 객체를 보낼 수 있어야합니다. 필자는 직렬화가 갈 길이 멀다고 읽었습니다. 그래서, 클라이언트에서, 내가 가진 : (원격 컴퓨터) 서버 측에

Public Class cTest 

    Dim Var1 As Boolean 
    Dim Var2 As String = "a test" 
    Dim Var3 As New Collections.ArrayList 

    Public Sub AddItem(ByVal Item As String) 
     Var3.Add(Item) 
    End Sub 

End Class 

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click 

     Dim oClasse As New cTest 

     oClasse.AddItem("StarWars") 
     oClasse.AddItem("StarTrek") 

     oPipe.SendToPipe(oClasse) 
    End Sub 

End Class 

Public Sub SendToPipe(ByVal test As cTest) 

     Dim xmlTest As New Xml.Serialization.XmlSerializer(GetType(cTest)) 
     xmlTest.Serialize(pipeClient, test) 

    End Sub 

:

Public Function ReadString() As String 

     Dim len As Integer = 0 
     len = CType(ioStream.ReadByte(), Integer) * 256 
     len += CType(ioStream.ReadByte(), Integer) 

     Try 
      Dim serializer As New Xml.Serialization.XmlSerializer(GetType(cTest)) 
      Dim Test As cTest 

      Test = CType(serializer.Deserialize(ioStream), cTest) 
     Catch ex As Exception 
     End Try 

End Function 

serializer.Deserialize는 XML 형식이 올바르지 않습니다라고 예외를 throw합니다.

내가 뭘 잘못하고있어?

시간 내 주셔서 감사합니다 내가 당신이라면

답변

0

내가 WCF 자기에게 호스팅 서비스를 사용하여 두 개의 이것은 주석으로 시작하지만 방에서 실행중인 콜백

0

를 사용하여 통신 할 것입니다 도움이됩니다. 나는 명명 된 파이프 통신에 대한 전문가가 아니지만 몇 시간이 걸렸습니다. 실제로 문제가되지 않을 수도 있습니다.

먼저 동일한 응용 프로그램에서 직렬화/직렬화를 테스트해야합니다. 다시 말하면 그림에서 파이프를 꺼내는 것으로 시작하십시오. 이렇게하면 직렬화 문제인지 명명 된 파이프 문제인지를 구분할 수 있습니다. 동일한 응용 프로그램에서 코드를 수행한다고 가정하면 두 응용 프로그램에서 생성 된 XML을 비교해야합니다. 둘 다 직렬화를 수행해야합니다. xml이 동일하면 (의심 스럽다) 파이프를 통해 전달하고 다시 비교하십시오.

여기서 더 나아가지만 네임 스페이스가 ctest 개체와 다르다는 것을 알 수 있습니다. 이 경우 두 응용 프로그램간에 공유되는 라이브러리에서 공유 클래스를 정의하는 데 도움이 될 수 있습니다.

가 작동 클라이언트 측에서 다음 코드를 사용하는 경우 :

1

마지막으로, 테스트 및 인터넷 검색을 많이 후, 나는 그것을 알아 냈

Dim oClasse As New cTest 

oClasse.AddItem("StarWars") 
oClasse.AddItem("StarTrek") 

Using PStream As IO.Pipes.NamedPipeClientStream = New IO.Pipes.NamedPipeClientStream(".", "VisionEnginePipeRead1", PipeDirection.Out, PipeOptions.None, TokenImpersonationLevel.None) 
      PStream.Connect() 
      Dim xmlTest As New Xml.Serialization.XmlSerializer(GetType(cTest)) 
      xmlTest.Serialize(PStream, oClasse) 
End Using 

을이 서버 측 :

Dim Test As cTest 

Using PStream As NamedPipeServerStream = New NamedPipeServerStream(pipeName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.None) 
      PStream.WaitForConnection() 
      Dim serializer As New Xml.Serialization.XmlSerializer(GetType(cTest)) 

      Test = CType(serializer.Deserialize(PStream), cTest) 
End Using 
관련 문제