我有两个通过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>));
希望能帮助某人
答案 0 :(得分:2)
SOAP Web服务基于WSDL和XML Schema。 WSDL描述了服务和操作,XML Schema定义了操作使用的数据。
XML Schema无法描述泛型。因此,Web服务中没有泛型。
答案 1 :(得分:1)
您无法在WCF中使用泛型。服务必须知道传输过程中的对象类型。但不是特定类型。您可以做的是您可以定义一个自定义类,其中包含应用程序中所有其他实体的定义。您可以根据需要设置特定实体,然后传输该类。通过这种方式,您也可以传输多个对象。