加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用结构与WCF服务

发布时间:2020-12-15 06:09:26 所属栏目:百科 来源:网络整理
导读:有没有关于使用结构体作为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世界,我会说(你不是传递类或结构实例 – 见上文).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读