作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个 wcf 服务,该服务在数据库中执行一些查找并将数据返回给客户端。用户在文本框中输入了他想查看的内容的 ID。这可以是客户 ID、产品 ID、订单 ID 或其他任何内容。服务器上的查找方法尝试在客户端表中查找 id。如果它不在那里,它就会出现在产品表等上,直到找到为止。
当调用服务器时,没有办法告诉用户正在寻找什么。据我所知,我需要在设计时指定返回类型,否则对象的序列化将不起作用。我唯一能想到的是包含所有可能对象的帮助程序类并从 wcfservice 返回它,还有更好的主意吗?
附加信息:我们正在使用 wsHttpBinding 和 Linq-To-Sql。该数据库是遗留的并且还使用了其他软件,因此无法更改数据对象。
最佳答案
您没有提到您用于服务的绑定(bind)。如果它是基于 SOAP 的绑定(bind),例如 wsHttpBinding 或 basicHttpBinding,那么您的方法可能返回的所有可能类型必须在编译时已知,以便它们可以在 WSDL 中公开,并且客户端可以生成代理类。在这种情况下,您必须定义一个包含 id 的基类,您的所有实体都将从该 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 上使用二进制序列化,则无需在编译时指定已知类型,因为二进制序列化程序将传输类型信息。
关于.net - 如何从 wcf 服务中检索未知类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476128/
我是一名优秀的程序员,十分优秀!