c# – 使用结构与WCF服务

前端之家收集整理的这篇文章主要介绍了c# – 使用结构与WCF服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有关于使用结构体作为WCF服务的返回类型的官方建议?

我正在与一个我没写的服务进行互动,并发现自己的灵感来询问我的烦恼是否得到保证.

我以前总是使用类 – 可能部分是因为这是样本总是显示,但是现在我想到了,因为其他“直观”的原因:

>我通过定义一个单独的项目来开始合同样式,其中接口表示服务将来回传递的类型.
>我使用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

更新:关于什么时候使用一个struct而不是一个类(一般来说,在.NET中),请看这个SO问题:

When should I use a struct instead of a class?

然而,由于WCF实际上是关于消息传递(即您的客户端进行方法调用,该调用及其参数将被转换成串行消息,该消息通过线路发送,然后在另一端重新组合并转换为方法调用),我没有看到有任何令人信服的理由使用结构体.

一般.NET的所有优点并不适用于WCF的SOA世界,我会说(你不是传递类或结构实例 – 见上文).

猜你在找的C#相关文章