有没有关于使用结构体作为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# – 使用结构与WCF服务的更多相关文章

  1. 寒城攻略:Listo 教你 25 天学会 Swift 语言 - 13 Methods

    方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例structPoint1{0.0,y=mutatingfuncmoveByX{x+=deltaXy+=deltaY}}varsomePoint1=Point1">1.0)注意定义结构体实例时必须为变量不能为常量somePoint1moveByX2.03.0)")//在变异方法中给self赋值structPoint2{Double){self=Point2}}varsomePoint2=Point2(x:somePoi

  2. 【Swift初见】Swift结构体

    访问rect这个实例里面的width和height方法也是用点语法:这样我们就完成了一个结构体的定义和创建一个结构体实例。结构体的成员方法:与C还有OC结构体不一样的是,swift的结构体可以包含成员方法,即行为,这就跟面向对象中的类的概念比较类似:我们给刚刚Rect结构体加上一个面积的方法:我们可以看出,方法的定义跟外部全局函数的定义是一样的,那么如何使用该成员方法呢?

  3. 寒城攻略:Listo 教你 25 天学会 Swift 语言 - 21 Nested Types

    //***********************************************************************************************//1.nestedTypes(类型嵌套)//________________________________________________________________________________

  4. Swift语法基础:5 - Swift的枚举和结构体

    在Siwft中的枚举类型以及结构体,是和OC中差不多的,但Swift中又有一些特性,下面让我们来看看:1.枚举的声明及使用PS:这里解释一下,枚举类型第一个开始的参数都是1,无论你是有多少case,都会递增的,比如例子的的Ace是1,那么Two就是名副其实的2,Three就是3,以此类推,一直到King,就是13,而enum里面有一个方法,这里面这个方法只是说可以在enum里定义方法,但我这个例子

  5. Swift语法基础:6 - Swift的Protocol和Extensions

    前面我们知道了枚举类型和结构体的声明,嵌套,以及基本的使用,现在让我们来看看Swift中的另外两个,一个是Protocol(协议),一个是Extensions(类别):1.声明ProtocolPS:在声明协议的时候,如果你要修改某个方法属性,你必须的在该方法前加上mutating这个关键字,否则不能修改.2.使用Protocol同样的,在结构体里一样可以使用,但是必须的加上mutating:Protocol也可以这么使用:PS:这里的a是前面例子里面的a.3.声明Extensions好了,这次我们就讲到这

  6. Swift面向对象的类型

    1、类2、结构体3、枚举在swift语言中通过类和结构体实现面向对象,在Swift语言中,枚举也具有面向对象的特性示例和对象在面向对象中,将类创建对象的过程称为实例化,因此将对象称为实例化,但是在swift中,枚举和结构体不能称为对象,因为结构体和枚举并不是彻底的面向对象类型,而是只包含了一些面向对象的特定,例如,在Swift中继承只发生在类上,结构体和枚举不能继承

  7. Swift基础语法: 25 - Swift的类和结构体

    2.有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。

  8. Swift编程高级教程 变量与常量

    提示实际应用中很少需要指定变量数据类型,Swift会根据所设置的值的类型进行推导。Swift使用字符串插值来输出变量和常量。Swift中并没有所谓的实例变量,而是将它们统一为属性了,这样使得属性的声明更加简化。Size封装了宽度和高度。而let只能用于常量的声明,表示它们的值不能发生改变。但是在Swift中可以直接将它们定义为类型的一部分。

  9. Swift中结构体(Struct)和类(Class)的区别

    今天這個篇文章要來介紹Swift中struct和class有什麼不一樣的地方?不过要提醒大家在Swift常用的String,Array,Dictionary都是struct所以let是会有效果的4.mutatingfunction我們先要為struct和class新增一個method名為changeWidth()而且我們在不改变原始的程式碼為前提下,新增一個method。如下structSRectangle{varwidth=200}extensionSRectangle{mutatingfuncchan

  10. Swift教程12-数组的结构体本质,对比NSArray

    Swift中的数组要求在创建时其存储的类型是确定的,这点与Oc中的数组有一些不同;当然,这也不是绝对的,因为有时候数组可以使用范型来约束其类型,只需遵循相应的协议即可,类型并不是完全一致的.Swift中的数组相比于Oc的数组,功能更加强大;使用更加简便;当然也更加复杂了(光是Array的代码就有9800多行)1.数组的本质,查看官方的API可以知道数组实际上是一个结构体.可以看到数组的构成包括:范

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部