.net - 如何从 wcf 服务中检索未知类型?

标签 .net wcf generics

我目前正在开发一个 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/

相关文章:

.net - .NET 是框架还是库?

c# - Tfs 格式文件 C# 项目

wcf - 已超过最大名称表字符数配额 (16384)

rest - WCF 代理使用 Post 即使指定了 WebGet 属性(仅当从另一个 WCF 服务调用时) - 导致 405 错误

.net - 如何从大气噪声中获取随机数?

asp.net - 如何在 ASP.NET WebForms 中以 HttpRequestBase 的形式访问请求?

wcf - 获取 WCF 休息服务的 Url

c# - 根据今天的日期格式化通用列表中的日期(WPF、DataGrid、C#)

C# 方法泛型返回类型转换

c# - Linq 表达式 IEnumerable<TEntity> 不包含 where 的定义