问题标签 [serviceknowntype]

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 回答
13183 浏览

.net - WCF:接口、泛型和 ServiceKnownType

我有以下内容:

当我运行 Get 方法时,出现以下错误:

尝试序列化参数http://tempuri.org/:GetResult时出错。InnerException 消息是 'Type 'PPS.Core.DomainModel.Support.Action.ActionResult`1[ [PPS.Core.DomainModel.SportProgram.ISportProgram, PPS.Core.DomainModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken= null]]' 的数据合同名称为 'ActionResultOfanyType: http://schemas.datacontract.org/2004/07/PPS.Core.DomainModel.Support.Action ' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。

从这个错误中我可以看到它可以解析 ActionResult 但它无法解析 ISportProgram 即使我的服务接口上有ServiceKnownType(typeof(ActionResult < SportProgram >)) ...

请注意,这是生成的参考存根,看起来像这样,所以我可以看到已知类型被正确地引入:

为什么会出现这种情况????请注意它正确地通过 WCF 服务......但是当返回结果时它会抛出异常。

最后 ActionResult 看起来像这样:

干杯安东尼

0 投票
2 回答
858 浏览

wcf - ServiceKnownTypeAttribute 不会在 WSDL 中弹出

我有一个服务接口:

如您所见,我在 ServiceContract 上指定了 typeof(Models.ArticleImage)。

因此,构建此服务的 WSDL 应该会导致 ArticleImage 在 WSDL 中弹出。不幸的是,这根本不会发生。这是为什么?

ArticleImage 上有 DataContract 。当我在我的界面中返回一个 ArticleImage 时,WSDL 会选择 ArticleImage。

编辑:它甚至没有在消费项目的服务引用中弹出!


这是大量测试的结果:

  • 我要添加的模型是 LINQ to SQL 模型。
  • 当我使用 ServiceKnownType 添加普通模型时,它可以工作。
  • 当我在我的界面中使用我的 LINQ to SQL 实体时,它可以工作。
  • 当我通过 ServiceKnownType 添加我的 LINQ to SQL 实体时,它不会弹出。
0 投票
1 回答
14802 浏览

wcf - 了解 WCF 中的 ServiceKnownType

我在理解 WCF 中的 ServiceKnownType 时遇到了一些麻烦。

取自此博客,以下代码不起作用:

.

它不起作用的原因是因为您试图添加一个圆圈,但服务合同只允许一个形状。你应该用 knowntypes 做一些事情,但我对它是如何工作的有点困惑。

既然该代码在服务中,为什么它不能自动知道 Circle 是从 Shape 派生的?此外,ServiceKnownType 实际上做了什么?

当 ServiceKnownType 放在 DataContract 之下时,显然它可以工作。我猜它说嘿,这种称为形状的特定对象类型也可以是圆形。我很难理解为什么它会这样做,因为如果你添加一个像 Square 这样的新类型,你将不得不为 Shape 类添加一个 ServiceKnownType 。如果它不能推断出来,将 KnownType 放到 Square 而不是 Shape 上岂不是有意义?所以 Square 说,嘿,我是一个 Shape,你不必摆弄 Shape 类吗?如果您的 Shape 类内置在库中,并且您想创建自己的衍生形状(如 DiamondShape),则无法将其添加到 Shape 类,因为您无权访问源代码。

0 投票
2 回答
1323 浏览

wcf - 使用 Spring 将 ServiceKnownTypeAttribute 应用于 WCF 服务

我正在尝试将 ServiceKnownTypeAttribute 应用于我的 WCF 服务,但在我的配置下方不断出现错误。有没有人有任何想法?

0 投票
1 回答
913 浏览

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

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

第三方

服务

客户

由于某些原因 :

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

可能是什么原因?

0 投票
4 回答
6982 浏览

c# - WCF:通用接口的序列化可能吗?

我正在尝试实现一个服务合同,其中包含一个采用通用接口的方法,并且该通用接口本身被赋予了一个接口参数。我用 ServiceKnownType 修饰了服务接口,我用常规 KnownType 修饰了服务实现,我用常规 KnownType 修饰了 datacontract 实现:

作为记录,我在那里有 Batch,因为您似乎只能为泛型类型表达一个 knowntype 一次——它似乎发出 BatchOfanyType,但我不知道如何处理这个问题。

我得到的例外是“将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。”

有什么明显的我做错了吗?只是不支持接口的通用接口吗?作为记录,我在这个项目中使用 C# 2.0 和 .NET 3.0。

0 投票
2 回答
683 浏览

wcf - WCF 与客户端上的共享对象和派生类

我有一个 WCF 服务,并且在共享程序集中与客户端共享类型。如果客户端创建派生类,是否可以将派生类型传回服务,以便我可以通过反射读取添加的属性?

我试过了,但由于服务不知道如何反序列化派生类型,因此出现了 KnownTypes 的问题。

//在客户端:

当将 myCar 传递给 Service 时,我收到了抱怨 knownType 的异常,但我无法在服务器上添加它,因为我不知道客户端将通过什么发送,并且我想通过反射处理额外的属性。

可以在运行时将客户端类型注册为 knowntypes 吗?
这可能是解决方案吗? http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

0 投票
2 回答
2039 浏览

wcf - WCF 客户端代理异常 - “类型无法添加到已知类型列表”

我在为服务代码创建 WCF 客户端代理时遇到问题,如下例所示:

每当我尝试在 VS 中使用“添加服务引用”创建 WCF 代理时,它都会失败并且跟踪日志说

无法将类型“WcfProxyTest.ClassA”添加到已知类型列表中,因为具有相同数据协定名称“ http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfKeyValueOfstringanyType ”的另一种类型“WcfProxyTest.ClassB ”是已经存在。如果存在特定类型的不同集合 - 例如 List<Test> 和 Test[],则它们不能同时添加为已知类型。考虑仅指定其中一种类型以添加​​到已知类型列表中。

我可以看到错误消息在说什么,但是有没有其他方法可以解决这个问题(除了重构类)。我正在处理一个遗留系统,其类的编写方式与我的示例相同,并且重写它们不是一种选择,因为这些东西位于系统的核心:S

有任何想法吗?谢谢!

0 投票
3 回答
12325 浏览

wcf - WCF 客户端在识别 ServiceKnownTypes 时遇到问题?

在将数据传回客户端时,我如何告诉 WCF 服务使用什么 KnownTypes?

我知道我可以使用该[ServiceKnownType]属性,这使得服务调用从 WCF 测试服务器运行良好,但是它仍然从客户端失败。我在这里错过了什么吗?

来自客户端的错误消息是:

{“元素‘http://schemas.datacontract.org/2004/07/BaseClassZ’包含映射到名称‘http://schemas.datacontract.org/2004/07/SubClassA’的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑使用 DataContractResolver 或将与“SubClassA”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到已知类型列表中传递给 DataContractSerializer。"}

使用 DataContractSerializer 和 KnownTypes 列表对 WCF 服务器上的对象进行序列化/反序列化工作正常。

更新:如果我将 KnownType 属性添加到基类,我似乎可以让客户端正确读取对象,但如果可能的话,我仍在寻找解决方法,因为基类用于很多项目而我没有我不想在添加新项目时修改基类上的 KnownType 属性。

0 投票
1 回答
516 浏览

wcf - Mono 2.10 / MonoTouch 4.0 中的 WCF KnownTypes

我有一个使用 WCF 的应用程序。它在 Ubuntu 上的 Mono 2.8.2 和 Windows 上的 .NET 3.0 上运行良好。

它使用“ServiceKnownType”属性装饰 WCF 服务契约,该属性指向返回使用服务器所需的派生类型的方法:

我正在将我的应用程序移植到 MonoTouch。我正在使用基于 Mono 2.10.1 的最新 4.0。这不再有效:我的 WCF 调用失败,因为客户端上的 DataContractSerializer 无法识别返回类型。

我在“GetKnownTypes”方法中设置了一个断点,发现它从未被调用过。我假设这部分 System.ServiceModel 在 MonoTouch 中不存在/不工作?

我尝试通过使用“KnownType”属性装饰基本返回类型来解决此问题。

再次,它不起作用,我的“GetKnownTypes”方法永远不会被调用。查看 DataContractSerializer 的源代码,似乎如果您使用方法名称而不是指定类型,它就会被忽略?!

我将通过指定类型而不是使用方法再次尝试(查看 DataContractSerializer 的源代码,看起来这将起作用),但是这在 MonoTouch 中对我来说很棘手,因为我需要使用 typeof 而不是 Type.GetType( “完全合格的类型名称”)。

还有其他解决方案吗?解决方法?

我确实看到了:如何以编程方式配置 WCF 已知类型?,但似乎 MonoTouch 缺少一些必需的接口......

提前致谢