我目前正在开发一种wcf服务,它在数据库中执行一些查找并将数据返回给客户端。用户输入了他想要在文本框中看到的内容的ID。这可以是客户端ID,产品ID,订单ID或其他。服务器上的查找方法尝试在客户端表中查找id。如果它不在那里它会在产品表等上,直到找到它。
当呼叫服务器时,无法分辨用户正在寻找什么。据我所知,我需要指定返回类型设计时间,否则对象的序列化不起作用。我唯一能想到的是包含所有可能对象的helper类,并从wcfservice返回任何更好的想法?
其他信息: 我们正在使用wsHttpBinding和Linq-To-Sql。数据库是遗留的,也使用其他软件,因此数据对象无法更改。
答案 0 :(得分:1)
您没有提及您用于服务的绑定。如果它是基于SOAP的绑定,例如wsHttpBinding或basicHttpBinding,则必须在编译时知道您的方法可能返回的所有可能类型,以便它们可以在WSDL中公开,并且客户端可以生成代理类。在这种情况下,您必须定义一个包含所有实体将从中派生的id的基类,并使用ServiceKnownTypeAttribute或在app.config / web.config文件中列出它们:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="MyNamespace.Entity">
<knownType type="MyNamespace.Client" />
<knownType type="MyNamespace.Product" />
<knownType type="MyNamespace.Order" />
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
如果您在TCP上使用二进制序列化,则无需在编译时指定已知类型,因为二进制序列化器将传输类型信息。
答案 1 :(得分:1)
您的解决方案应该有效。其他解决方案是: