2017-09-19 19 views
0

私は、サービスとクライアントの間で共有されるプロジェクトにClass2とClass1を持っています。WCFサービスから継承したクラスが返されない

<DataContract> _ 
Public Class Class1 
    <DataMember> _ 
    Public Property Test 
End Class 

<DataContract()> _ 
Public Class Class2(Of ReturnType) 
    <DataMember> _ 
    Public Property Test As String 
    <DataMember()> _ 
    Public Property Items() As ReturnType() 
End Class 

これは私のサービス・インターフェースである:

<ServiceContract(Name:="Service")> _ 
Public Interface IService 

    <OperationContract()> _ 
    Function GetStuff() As Class2(Of Class1) 

End Interface 

そして、私のサービスの実装:私のサービスプロジェクトで

Public Class Service 
    Implements IService 

    Public Function GetStuff() As Class2(Of Class1) Implements IService.GetStuff 
     Dim results As Class2(Of Class1) = New Class2(Of Class1) 
     Dim oClass1 As New Class1 

     results.Test = "test" 
     oClass1.Test = "test" 
     results.Items = {oClass1} 
     Return results 

    End Function 
End Class 

私も共有クラスから継承するクラス1を持っている:

Public Class Class1 
    Inherits [Shared].Entities.Class1 

End Class 

私のクライアントコード:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim oEndpoint As New System.ServiceModel.EndpointAddress(New Uri("net.tcp://localhost/service"), _ 
          System.ServiceModel.EndpointIdentity.CreateUpnIdentity("")) 
    Dim oClient As New ServiceClient("IService", oEndpoint) 

    Dim oList As Class2(Of Class1) = oClient.GetStuff() 
    MessageBox.Show(oList.Test) 
    MessageBox.Show(oList.Items.Length.ToString) 
End Sub 

Public Class ServiceClient 
    Inherits System.ServiceModel.ClientBase(Of IService) 
    Implements IService 

    Public Sub New(ByVal endpointConfigurationName As String, _ 
       ByVal endpoint As System.ServiceModel.EndpointAddress) 
     MyBase.New(endpointConfigurationName, endpoint) 
    End Sub 

    Public Function GetStuff() As Class2(Of Class1) Implements IService.GetStuff 

     Dim oRet As Class2(Of Class1) = MyBase.Channel.GetStuff() 
     Return oRet 
    End Function 
End Class 

は、2つのメッセージボックス内のボタンクリックした結果を文字列(予想)「テスト」と文字列0と1とのいずれかを実行している(私は1を期待)。継承したClass1を私のサービスプロジェクトから除外すると、期待通りに動作します。

このプロジェクトはこのように何年も働いていますが、私が最近変更を加えて再構築して作業を停止したときだけです。これをどのように機能させることができますか?明らかに私の実際のプロジェクトでは、サービスプロジェクトのClass1には、使いたい機能がいくつか追加されています。

答えて

0

派生クラスのDataContract属性にNamespaceを追加しました。これは既にベースクラスに存在していました。

関連する問題