2

在我的解决方案中,我使用 C# 编写了 Web 服务(后端),并通过 WCF 提供给客户端,该客户端是带有 VB.NET 的 MVC3 Web 前端。对于一个 Web 服务,我需要向客户端发送一个动态对象列表 List<SerializableDynamicObject>

我实现了此处描述的解决方案:DLR 的 WCF Serializaiont示例代码。在我用 C# 编写的测试控制台应用程序中,我可以轻松读取 WCF 提供的动态属性。不幸的是,在 VB.NET 控制台应用程序中,当我尝试调用其中一个属性时,我收到第一个属性的错误消息“未找到类型‘SerializableDynamicObject’的公共成员‘TRIP_ID’”。有趣的是,我可以在 C# 和 VB.NET 中的服务对象的“Watch”和“Locals”窗口动态属性中看到。

谁能向我解释问题是什么以及如何解决?谢谢...

网络服务代码:

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;
    }

}

C#版本读取WCF动态对象(作品),动态属性可见并可调用:

 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