从远程计算机</t>获取泛型类型对象(例如MyObject <t>)

时间:2010-06-03 03:05:43

标签: c# wcf generics

我有两个通过WCF进行通信的应用程序。

在服务器上存在以下对象:

public class MyObject<T>
{
    ...
    public Entry<T> GetValue()
}

Entry<T>T Data作为公共财产的另一个对象。 T可以是任意数量的类型(字符串,双精度等)

在客户端上,我ClientObject<T>需要从服务器获取Data的值(相同类型)。

由于我正在使用WCF,我必须将我的ServiceContract定义为一个接口,我不能ClientObject<T>调用Entry<T> GetMyObjectValue (string Name)来调用GetValue上正确的MyObject<T>因为我的界面不知道类型信息。

我尝试在界面中实现单独的GetValue函数(GetMyObjectValueDouble,GetMyObjectValueString),然后让ClientObject确定要调用的正确函数。但是,Entry<T> val = (Entry<T>)GetMyObjectValueDouble(...);不起作用,因为它不确定类型信息。

如何使用正确的类型信息在WCF上获取通用对象?如果我能提供其他详细信息,请告诉我。

谢谢!


我使用了多种方法来实现这一点。我在服务器上实现了几个Entry<double> GetMyObjectValueDouble(...)Entry<string> GetMyObjectValueString(...)方法。在客户端,我检查对象的类型,然后调用适当的函数:

Entry<T> Data = (Entry<T>)Convert.ChangeType(Client.GetMyObjectValueDouble(...),typeof(Entry<T>));

希望能帮助某人

2 个答案:

答案 0 :(得分:2)

SOAP Web服务基于WSDL和XML Schema。 WSDL描述了服务和操作,XML Schema定义了操作使用的数据。

XML Schema无法描述泛型。因此,Web服务中没有泛型。

答案 1 :(得分:1)

您无法在WCF中使用泛型。服务必须知道传输过程中的对象类型。但不是特定类型。您可以做的是您可以定义一个自定义类,其中包含应用程序中所有其他实体的定义。您可以根据需要设置特定实体,然后传输该类。通过这种方式,您也可以传输多个对象。