在我的解决方案中,我使用 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