问题标签 [known-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
23988 浏览

.net - 如何以编程方式配置 WCF 已知类型?

我的客户端/服务器应用程序使用 WCF 进行通信,这非常棒。然而,当前架构的一个缺点是我必须对某些传输类型使用已知类型配置。我使用的是内部 Pub/Sub 机制,这个要求是不可避免的。

问题是很容易忘记添加已知类型,如果你这样做了,WCF 会默默地失败,几乎没有关于出错的线索。

在我的应用程序中,我知道要发送的类型集。我想以编程方式执行配置,而不是通过App.config当前包含以下内容的文件以声明方式执行配置:

相反,我想做这样的事情:

有人可以解释一下我该怎么做吗?

编辑请理解,我试图在运行时动态设置已知类型,而不是在配置中以声明方式或在源代码中使用属性。

这基本上是关于 WCF API 的问题,而不是样式问题。

编辑 2 这个 MSDN 页面页面状态:

您还可以将类型添加到通过 DataContractSerializer 的 KnownTypes 属性访问的 ReadOnlyCollection。

不幸的是,这就是它所说的全部,并且鉴于 KnownTypes 是一个只读属性,并且该属性的值是 a ,它并没有多大意义ReadOnlyCollection

0 投票
2 回答
9035 浏览

.net - 如何在配置中指定通用的 WCF 已知类型?

我有一个类型,我们称之为Data<TKey>Wrapper我还有一个 WCF 服务合同,它接受具有类型属性的类型(让我们称之为) Object(出于我不会讨论的原因,这不是可选的)。

现在我正在发送两个IntData课程LongData

它们都在已知类型配置文件中配置。配置类似于这样:

在这一点上,一切正常。

但我即将添加第三种类型,我不喜欢不必要的空 .NET 类IntDataLongData. 它们的存在只是因为...

我不知道如何在 WCF 配置中指定泛型类型!

我想做这样的事情,但不知道确切的语法。

什么是正确的语法?

(还要注意,我不能设置[KnownType(...)]属性,Wrapper因为它不是我的类型。配置似乎是唯一的方法。)

编辑

@baretta 的回答效果很好。但是请注意,最初我收到此错误:

无法将类型“MyAssembly.Data`1[System.Int64]”添加到已知类型列表中,因为另一个类型“MyAssembly.Data`1[System.Int32]”具有相同的数据合同名称“ http://www.mycompany .com/MyAssembly:Data ' 已经存在。

我在原始问题中没有提到它,但我的类型有一个明确的数据合同名称。像这样的东西:

Name直到我从属性中删除了属性值,才会出现上述错误。希望也能帮助别人。我不知道在这种情况下哪种格式有效。这些没有:

有人知道怎么做吗?

编辑 2

再次感谢@baretta,他指出正确的语法实际上是:

0 投票
1 回答
3930 浏览

wcf - 为不同程序集中的数据协定声明已知类型

我在 WCF 服务中有一个方法,它返回一个复杂类型 (myComplexResult),其中包括一个列表 (Of Common.myBaseClass) 作为其成员之一。我希望这个列表包含不同类型的 Foo.myClass1 和 Bar.myClass2 的项目,它们都继承自 Common.myBaseClass。请注意,所有这些类都在不同的程序集中定义。

该服务抛出此异常:

不应使用数据合同名称“myClass1: http://mynamespace/foo/ ”键入“Foo.myClass1” 。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

好的,所以我意识到我需要将 myClass1 和 myClass2 声明为 myBaseClass 的已知类型,以便 DataContractSerializer 知道如何处理它们。我不能做显而易见的事情并使用 myClass1 和 myClass2 的 KnownType 属性来装饰 myBaseClass 类,因为这意味着添加对 Foo 和 Bar 程序集的引用,这会导致循环依赖。

我希望在我的配置文件中使用 declareTypes 并且我尝试了这个:

这似乎没有帮助,所以我尝试将 KnownType 属性添加到 myComplexResult:

但我仍然遇到同样的错误。帮助!我该怎么办?

0 投票
1 回答
5348 浏览

.net - DataContractSerializer、KnownType 和继承

我读过很多关于已知类型的文章,我相信我的例子应该有效。但事实并非如此。我在反序列化时遇到以下异常,但不明白为什么:

第 1 行位置 2 出错。从命名空间“ http://schemas.datacontract.org/2004/07/ConsoleApplication2 ”中期待元素“A”。遇到名称为“C”的“元素”,命名空间“ http://schemas ” .datacontract.org/2004/07/ConsoleApplication2 '。

我错过了什么?

0 投票
1 回答
3255 浏览

wcf - 如何从外部配置文件添加服务已知类型

我很难理解如何准确地添加已知类型;对于 WCF,来自我的 wcf 外部的配置文件。我找到了一个如何设置配置文件的例子,但是,我对文件的设置方式有点困惑,我不确定我应该如何调用这个配置文件来加载服务我的 wcf 的已知类型。这是包含已知类型的配置文件的示例。

http://codeidol.com/csharp/wcf/Data-Contracts/Data-Contract-Hierarchy/

我对为什么必须添加 a 类型然后将另一种类型指定为刚刚添加的该类型的子类型感到困惑。在我看来,您只需添加“联系人”类型,指定其程序集;“主机”就是这样。为什么 knownType 元素标签跟在指定另一种类型的添加类型元素标签之后?另外,一旦我正确设置了配置文件,我何时以及如何从我的 wcf 调用它?任何援助将不胜感激。谢谢!

更新 1: **好的,这让我有更好的理解,谢谢。我确实尝试了你所说的,但没有找到 ServiceKnownTypes。我在 App.config 文件中唯一不同的是在我的服务和主机中,我没有任何 knownType type = "..." 来指定。这是我的一目了然。你知道我做错了什么吗?

很抱歉之前将此发布到评论部分,我希望这更清楚。**

更新2: 这是更接近我想要完成的事情。你觉得呢?你有没有什么想法?

0 投票
2 回答
1693 浏览

.net - WCF 合同 - 命名空间和序列化异常

我正在使用提供以下调用和响应的第三方 Web 服务

这是我写的合约和支持类型

然后我的客户看起来像这样

当我运行它时,我得到以下异常

无法使用 XmlSerializer 反序列化具有根名称“响应”和根命名空间“”的 XML 主体(用于操作“GetFoo”和合同(“IFooBarService”,“ http://tempuri.org/ ”))。确保将 XML 对应的类型添加到服务的已知类型集合中。

如果我从 中注释掉GetBar操作IFooBarService,它工作正常。我知道我在这里遗漏了一个重要的概念——只是不知道要寻找什么。构造我的合约类型以便正确反序列化它们的正确方法是什么?

0 投票
1 回答
19161 浏览

.net - 使用 KnownType 和 ServiceKnownType 时 WCF 有什么区别?

我有一个返回动物数组的服务,但列表可以包含猫、狗等,它们都扩展了动物。我知道我需要分别在实体类或服务类上使用 KnownType 或 ServiceKnownType 属性。

2个属性有什么区别?我更喜欢 ServiceKnownType,因为它应用于服务,正是需要和调用它的地方,而不是应用于我的实体的 KnownType。对我来说,将它应用于实体类意味着提前知道我的实体类是如何被使用的。

现在我把它放在我的实体上,它就像一个魅力,但我在这里寻找关于最佳实践和有用性的指导。

0 投票
1 回答
5139 浏览

wcf - WCF 异常:无法添加到已知类型列表

0 投票
2 回答
166 浏览

.net - 为什么我们在某些机器上出现 WCF“框架错误”,而在其他机器上却没有

0 投票
1 回答
913 浏览

c# - 即使它在 ServiceKnownType(typeof(...)) 上,也不会在 wcf 类型上

我在我的服务中使用第三方类,所以我无法编辑它们。

第三方

服务

客户

由于某些原因 :

抛出 B 意外的异常并将其添加到 datacontractSerializer KnownTypes

可能是什么原因?