gpt4 book ai didi

c# - 将结构与 WCF 服务一起使用

转载 作者:可可西里 更新时间:2023-11-01 07:55:17 25 4
gpt4 key购买 nike

对于使用结构作为 WCF 服务的返回类型是否有官方建议?

我目前正在与一个不是我编写的服务进行交互,我发现自己受到启发去询问是否有必要让我感到烦恼。

我过去一直使用类 - 部分原因可能是示例总是显示的内容,但正如我现在所想的那样,出于其他“直觉”原因:

  • 我通过定义一个单独的项目来开始契约(Contract)风格,该项目的接口(interface)表示将由服务来回传递的类型。

  • 我经常使用 LINQ,因此可空性测试对于引用类型是隐式的,而对于结构和其他值类型,我总是需要将其标记为可为空。

虽然我承认它比我脑海中的项目符号列表更直观,但我会立即想到这些。我想问这个问题是因为我正在处理返回结构的服务并且在处理返回值时必须编写:

var foo = Bar.Value.MyField;

代替

var foo = Bar.Value;

最佳答案

如果您可以创建一个结构并在其上放置一个[DataContract] 属性 - 继续使用它吧!对于 WCF,这没有什么区别 - WCF 只要求使用的类或结构用 DataContract 属性标记,并且要包含在序列化消息中的所有字段都用 [DataMember] 标记 属性。

如果您在 DataContractAttribute 上查看 MSDN 文档,它表明您也可以在结构上使用它:

[AttributeUsageAttribute(AttributeTargets.Class|
AttributeTargets.Struct|AttributeTargets.Enum,
Inherited = false, AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute

更新:至于何时使用结构而不是类(通常在 .NET 中),请在此处查看这个 SO 问题:

When should I use a struct instead of a class?

但是,由于 WCF 实际上是关于消息传递的(即您的客户端进行方法调用,该调用及其参数被转换为序列化消息,该消息通过网络发送,然后在另一端重新组装并返回进入方法调用),我看不出有任何令人信服的理由来使用 struct

通用 .NET 的所有优点并不真正适用于 WCF 的 SOA 世界,我会说(您没有传递类或结构实例 - 见上文)。

关于c# - 将结构与 WCF 服务一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com