您好,我一直在阅读一些讲义,但我无法解释为什么这种方法:
[OperationContract]
Student PostStudent (Student student);
很好。
这种方法很糟糕:
[OperationContract]
void PostStudent (string firstname, string lastname etc..);
然而我实现的版本是:
[OperationContract]
void PostStudent(Student student);
所以我不确定我的实施版本是否不好,我也不确定我的讲师是如何得到的
Student PostStudent (Student student);
//?
答案 0 :(得分:3)
Web服务建立在消息的使用上。 WCF中的消息是通过编写一个类Student
类,以及(optionally)用DataContract
属性标记它来定义的。这样可以在该类的properties上进行版本控制和设置各种属性(尽管使用MessageParameter属性也可以实现后一种效果)。
是的,PostStudent (string firstname, string lastname etc..)
很糟糕。
是否从该方法返回某些内容取决于您。 void
可以很好,因为使用例如SOAP可以返回一个故障,指示无法创建用户的原因:没有错误意味着创建进展顺利。
当您想要查看创建的学生时,您也可以定义PostStudentResult
(或PostResult<T>
)类并返回该类,其中包含属性Student
(或{{1 }}和T Result
,其中第一个包含创建的学生,后者表示创建是否成功。
答案 1 :(得分:0)
Web服务中的返回值通常不是坏习惯。所以这是关于参数。属于一起的数据应该包含在Objects中。
此外,Post方法根本不应该获得返回值。您发布它,如果出现错误,您将收到异常。
如果你需要接收一些学生,你应该创建一个方法:
Student GetStudentByName(string name);
答案 2 :(得分:0)
如果它是WCF,那么使用Void方法指定Action也是一个很好的做法。
答案 3 :(得分:0)
就像evryone别说的那样,有太多的方法参数是不好的做法。无论如何,我只能看到你的签名和你提到的好签名之间的区别。将学生对象作为返回将使您能够在db中添加后添加学生的ID。同样的事情适用于对象的任何其他计算属性。有一个void方法将强制您再次加载该对象,这意味着如果您想在发布后直接使用该对象,则需要额外访问服务器。任何具有void WCF方法的方法都不错,如果返回对象只是一个额外的带宽。