在我的解决方案中,我有用C#编写的webservice(后端),并通过WCF提供给客户端,该客户端是使用VB.NET的MVC3 Web前端。对于一个Web服务,我需要向客户端发送动态对象列表List<SerializableDynamicObject>
。
我实施了此处描述的解决方案:WCF Serializaiont of DLR,Example 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