在VB.NET中无法访问在C#(WCF)中创建的可序列化动态对象

时间:2012-09-24 09:34:28

标签: c# vb.net wcf dynamicobject

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

我实施了此处描述的解决方案:WCF Serializaiont of DLRExample code。 在我用C#编写的测试控制台应用程序中,我可以轻松读取WCF提供的动态属性。不幸的是,在VB.NET控制台应用程序中,当我尝试调用其中一个属性时,我收到第一个属性的错误消息&#34;公共成员&#39; TRIP_ID&#39;在类型&#39; SerializableDynamicObject&#39;找不到&#34;。有趣的是,我可以在&#34; Watch&#34;和#34;当地人&#34;用于C#和VB.NET中的服务对象的Windows动态属性。

任何人都可以向我解释问题是什么以及如何解决这个问题?感谢...

网络服务代码:

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

0 个答案:

没有答案