2

私のソリューションでは、Web サービス (バックエンド) を C# で記述し、WCF を介して、VB.NET を使用した MVC3 Web フロントエンドであるクライアントに提供しています。ある Web サービスでは、動的オブジェクトのリストをクライアントに送信する必要があります List<SerializableDynamicObject>

ここで説明するソリューションを実装しました: WCF Serializaiont of DLR , Example code。C# で記述されたテスト コンソール アプリケーションでは、WCF によって提供される動的プロパティを簡単に読み取ることができます。残念ながら、VB.NET コンソール アプリケーションでプロパティの 1 つを呼び出そうとすると、最初のプロパティのエラー メッセージ「タイプ 'SerializableDynamicObject' のパブリック メンバー 'TRIP_ID' が見つかりません」が表示されます。興味深いのは、C# と VB.NET の両方で提供されるオブジェクトの動的プロパティを [ウォッチ] ウィンドウと [ローカル] ウィンドウで確認できることです。

何が問題で、これを解決する方法を誰かが私に説明できますか? ありがとう...

Web サービス コード:

public class Service1 : IService1
{        
    public object Process(object value)
    {
        dynamic d = new SerializableDynamicObject();
        d.TRIP_ID = Convert.ToInt64(1);
        d.TRIP_NAM = "TRIP NAM";
        d.TRIP_USR_CRE_DTE = DateTime.Now;
        d.TripValue = new SerializableDynamicObject();
        d.TripValue.TPVL_TRIP_ID = Convert.ToInt64(1);
        d.TripValue.TPVL_VAL = "TPVL VAL";
        return d;
    }

}

WCF動的オブジェクトを読み取るC#バージョン(動作)、動的プロパティが表示され、呼び出すことができます:

 class Program
{
    static void Main(string[] args)
    {
        dynamic d = new SerializableDynamicObject();
        d.Testing = "this is a test.";
        DynService.Service1Client client = new DynService.Service1Client();
        dynamic res = client.Process(d);
        Int64  TRIP_ID = res.TRIP_ID; 
        string TRIP_NAM = res.TRIP_NAM;
        DateTime TRIP_USR_CRE_DTE = res.TRIP_USR_CRE_DTE;
        Int64 TPVL_TRIP_ID = res.TripValue.TPVL_TRIP_ID;
        string TPVL_VAL = res.TripValue.TPVL_VAL;             
    }
}

WCF 動的オブジェクトを読み取る VB.NET バージョン (動作していません)

Option Strict Off
Option Infer On
Imports System.Linq
Imports DynSrv
Module Module1
    Sub Main()
        Dim d As Object = New SerializableDynamicObject()
        d.Testing = "this is a test."
        Dim client As New ServiceReference1.Service1Client()
        Dim res As Object = client.Process(d)
        Dim TRIP_ID As Int64 = res.TRIP_ID
        Dim TRIP_NAM As String = res.TRIP_NAM
        Dim TRIP_USR_CRE_DTE As Date = res.TRIP_USR_CRE_DTE
        Dim TPVL_TRIP_ID As Int64 = res.TripValue.TPVL_TRIP_ID
        Dim TPVL_VAL As String = res.TripValue.TPVL_VAL

    End Sub
End Module
4

0 に答える 0