问题标签 [wcf-serialization]

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 投票
1 回答
3380 浏览

c# - WCF、流、消息合同错误:反序列化请求消息正文时出错

我开发了一些复杂的 WCF 服务方法。我想使用 Streaming 传输模式,因为我有多个参数,所以我定义了一个带有正文和标头的 MessageContract。

请注意,根据我在 MSDN 上阅读的指南,流是主体的唯一成员。

该方法定义如下:

当我尝试调用该方法(使用反射)时,出现错误:

反序列化操作“SaveReportAudio”的请求消息正文时出错。OperationFormatter 遇到无效的消息正文。预计会找到名称为“SaveReportAudio”和命名空间“ http://tempuri.org/ ”的节点类型“元素”。找到名称为“ReportAudioMessage”和命名空间“ http://tempuri.org/ ”的节点类型“元素”

SaveReportAudio 是我正在调用的服务方法的名称。ReportAudioMessage 是定义的 MessageContract 的名称。显然,我的 Soap Message 被抬高了,但我不知道如何...... :(

以下是服务的 web 配置的服务模型节点:

这里是客户端 App.Config 的服务模型节点:

0 投票
1 回答
483 浏览

wcf - 配置 WCF 以将数组反序列化为不使用 svcutil 的集合

我有一个net.tcpWCF 服务及其客户端,每个都在一个程序集中,并共享另一个包含服务接口和 DTO 的程序集。

Channel客户端使用实例化的 through实现为服务的代理ChannelFactory

正如预期的那样,SomeList客户端返回的 DTO 字段是一个数组,但我希望它由 WCF 转换为List. 正如您可能从所描述的设置中怀疑的那样,我不使用svcutil(或添加服务引用对话框),所以我不能使用configureType.

我不想修改客户端代理以实例化列表并修改客户端代理中接收到的 DTO,因为实际实现使用命令处理器,使用在运行时通过依赖注入解析的接口来避免耦合 - 这个解决方案可以相反,通过要求客户端执行已知的服务命令。

因此,我目前正在使用修改 DTO 以在内部创建 List 实例的变通方法:

但是,我宁愿避免这种情况。所以问题是:

如何配置 WCF 反序列化以便array转换为预期的List

有没有办法App.config在创建时通过在代码中或从代码中的绑定来配置反序列化Channel?也许通过ImportOptions.ReferencedCollectionTypesCollectionDataContract

0 投票
0 回答
88 浏览

c# - 使用“预序列化”对象作为 WCF OperationContract 方法参数

我正在构建一个共享状态应用程序,其中 WCF 服务器应用程序将来自不同来源的数据聚合到单个数据模型中,然后与客户端同步。它为每个客户端提供模型的初始快照,然后将增量作为模型中的每个模型属性发送。结果,状态在所有客户端之间共享。

因为模型是易变的,所以每个增量都需要是数据模型属性的深层副本,其中可以包括具有嵌套属性的复杂对象。一旦属性发生变化,就会生成一个副本并将其传递给客户端队列处理程序。它必须是副本 - 我不能传递对属性的引用,因为它可能会在序列化过程中发生变化。在将增量传递给每个客户端时锁定模型是不可取的。我希望在制作副本后立即释放应用程序的主线程。

我的问题是如何以最有效的方式将深拷贝与 WCF 线序列化结合起来。创建每个增量的深层副本的一种快速而廉价的方法是使用DataContractSerializer班级。因为这通常在 WCF 序列化中使用,所以感觉这可以节省序列化 delta 以传输到客户端的时间 - 也许有一种方法可以在一个操作中完成这两项操作。因此,我正在寻找一种方法来暂停双工回调接口上特定 OperationContract 方法的序列化。实际上,我正在寻找一种方法来告诉绑定“不要序列化此 OperationContract 方法的参数值 - 它已经使用 DataContractSerializer 序列化 - 请直接将其传递给客户端。因为我使用的是 Silverlight 客户端,所以我使用的绑定是 PollingDuplexHttpBinding。

0 投票
2 回答
971 浏览

c# - Newtonsoft.Json 导致序列化发生两次导致 Reference.cs 中的重复定义

我有一个项目 Common 有一个服务参考。将Newtonsoft.json(版本 6.0.2的引用添加到具有服务引用的同一个项目(Common)和 Serializable 类 ChatLine

我更新了服务参考。现在在构建项目 Common 时,会弹出以下错误。

构建错误:

错误 5 命名空间“”已包含“AuditStatus”的定义

这是更新服务参考后在 Reference.cs 中生成的代码

注意:我注意到添加对 Newtonsoft.Json 的引用导致使用两个不同的序列化程序进行序列化:XML serailizer 和 Datacontract serailizer 导致 Reference.cs 中的重复定义。如果我删除对 Newtonsoft.Json 的引用并将 ChatLine 类更改为一切正常。

参考.svcmap

知道是什么问题吗?

0 投票
2 回答
957 浏览

c# - WCF 服务抛出:接收 HTTP 响应时发生错误

我有 WCF 服务,我将它托管在我的本地服务器(本地计算机)中,它工作正常,但是当我将它托管在服务器(互联网)中时,它会抛出以下错误

接收对http://www.xxxxxxxx.com/Services/WCFService.svc的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。

此 WCF 服务用于上传 pdf 文件,也可以根据上传的 pdf 文件进行操作。

当我上传 pdf 文件并且该文件有更多页面(大约 500 以上)时发生了问题,当时它需要更多的执行时间(大约 6 到 8 分钟)。

如果我上传具有 100 页、200 页、300 页的 pdf 文件,那么它当时运行良好。

注意:所有 pdf 文件的大小都低于 5 MB。

0 投票
2 回答
173 浏览

c# - 通过 WCF 服务从域模型中公开数据的最佳方法

我在核心库中有大量领域模型,其中还包含获取各种模型集的方法。多个 WCF 服务项目引用此库并发布集合,例如

GetProducts(int categoryId)

我最初的方法是用 DataContract 和 DataMember 属性装饰域模型,然后从 WCF 服务方法中返回它们。但是我看到了这种方法的缺陷,因为现在一些服务希望将不同的模型属性序列化给其他服务。

我想我有两个选择:

  1. 在每个 WCF 项目中,为该项目创建具有必要属性和特性的 DTO 类,并从服务方法中返回这些。从域模型构造 DTO。这看起来像是“正确”的方法,但随着域模型的扩展,设置和维护起来非常耗时。

  2. 编写我自己的 xml 序列化程序,根据项目动态选择要在运行时序列化的域模型的哪些属性。我不知道这是否可能!

(我还考虑了将我不想序列化的属性设置为默认值的“技巧”,然后在序列化后将它们改回来,但它太繁琐而且闻起来很糟糕)

有没有其他方法或者有没有办法减少 #1 中涉及的手动工作?

0 投票
0 回答
64 浏览

wpf - 自动序列化实体框架实体 WCF

构建解决方案时可以“自动”序列化数据库中的所有实体吗?(我使用 WCF、WPF 和实体框架 6)

我观察到一些实体没有做任何事情就被序列化了。

在服务引用配置(在客户端)中,检查所有引用程序集中的重用类型。

在此处输入图像描述

0 投票
0 回答
1648 浏览

asp.net-core - 如何用 .net core 2.0 替换 SoapFormatter 序列化和反序列化?

我正在将一个旧的 wcf 项目迁移到 .net core 2.0。在某些地方,代码使用 SoapFormatter 类来序列化和反序列化 Soap 格式的数据。.net core 2.0 不再支持 Soap Formatter,所以我需要替换这段代码才能开始使用 XMLSerialization。数据库中已经存储了一些数据,这些数据使用 SoapFormatter 进行序列化,因此我无法迁移已经存储的数据。有什么方法可以用 Xml 序列化序列化和反序列化已经存在的数据而不破坏它?

使用soapformatter反序列化的代码是:

如果您需要更多信息,请告诉我。如果评价不错,我也对任何第三方库开放?

0 投票
1 回答
40 浏览

c# - 是否可以在 WCF 服务的 DataContract 中定义位的使用?

我有一个int使用位掩码的典型模式的 C++ 程序。该位掩码在这样的枚举中定义:

当我在这样的 C# WCF 服务中使用枚举时

我可以看到我在这里定义的值没有被使用。我可以看到这样的枚举总是被“重新编号”。

是否可以在任何地方的合同中定义这种位使用?

为每个位创建一个布尔字段不是我喜欢的。它还会使数据块膨胀。