2012-04-13 57 views
1

我需要将未知类型从我的客户端传递给wcf服务,发送自定义类型为wcf服务

类型对于服务是未知的。

例如我有一个类客户,我创建了一个序列化的实例并发送到服务,问题出现时,我需要反序列化我必须提供类型以将该desrialized对象。

类型不能序列,当我试图得到以下错误:

{"Type 'System.RuntimeType' with data contract name 
'RuntimeType:http://schemas.datacontract.org/2004/07/System' is not expected. Consider 
    using a DataContractResolver or add any types not known statically to the list of 
    known types - for example, by using the KnownTypeAttribute attribute or by adding 
    them to the list of known types passed to DataContractSerializer."} 

我需要寻找周围的工作对于这个问题,任何想法?

只是概括地说:

我正在寻找一个发送未知类型的WCF服务的解决方法。

+1

您能否澄清一下:“另一端”是否具有:相同的客户类,但事先并不知道传入数据是客户实例,b:不同但类似/兼容的客户类,c:对客户没有任何了解? – 2012-04-13 22:54:50

+1

一旦你收到它,你将如何使用这个对象? – 2012-04-13 22:57:52

+0

@MarcGravell c - 不知道客户类别的任何信息 – 2012-04-13 23:03:17

回答

2

如果另一端不了解它(注释),那么你不可能反序列化。即使使用基于类型的序列化器(BinaryFormatter/NetDataContractSerializer),也无法做到这一点。

如果你发送的是完全的外部数据,那么你基本上只限于XML或JSON之类的东西,即使如此,它的含义也有点含糊不清(是一个字符串?int?float?long?)。

WCF不适合您的场景(也不是大多数其他基于合同的堆栈;大多数系统希望能够理解传入数据)。

+0

是否可以发送包含我的客户类型 的整个dll,然后将其加载到服务端? – 2012-04-13 23:18:00

+0

我不会说WCF不适合。 SOAP可能不会,但是运行JSON或XML的RESTful WCF Web服务将会很好。 – 2012-04-13 23:51:30

+0

我需要创建一个动态类型的处理单元, ,它解决了发送给服务的特定对象类型。 我需要键入以解析类型的执行方法 – 2012-04-14 00:04:26