-1

嗨,我一直在阅读一些讲义,但我无法弄清楚为什么这种方法:

[OperationContract]
Student PostStudent (Student student);

很好。

而且这种方法很糟糕:

[OperationContract]
void PostStudent (string firstname, string lastname etc..);

然而我实现的版本是这样的:

[OperationContract]
void PostStudent(Student student);

所以我不确定我实施的版本是否不好,我也不确定我的讲师是如何得到的

Student PostStudent (Student student);// ?

4

4 回答 4

3

Web 服务是建立在使用消息的基础上的。WCF 中的消息是通过编写一个类来定义的,您的Student类就是该类,并(可选地DataContract)用属性标记它。这启用了版本控制并在该类的属性上设置各种属性尽管后一种效果也可以使用MessageParameter属性来实现)。

所以,是的,PostStudent (string firstname, string lastname etc..)很糟糕。

是否从该方法返回某些内容取决于您。Avoid可以很好,因为例如使用 SOAP,您可以返回一个错误,指示无法创建用户的原因:没有错误意味着创建顺利。

当您想检查创建的学生时,您不妨定义一个PostStudentResult(或PostResult<T>)类并返回它,其中包含属性Student(或T Result)和Status,其中第一个包含创建时的学生,后者指示是否创建那是成功的。

于 2012-05-03T11:40:34.457 回答
0

Web 服务中的返回值通常不是坏习惯。所以它是关于参数的。属于一起的数据应该包装在对象中。

此外, Post 方法根本不应该获得返回值。您发布它,如果出现错误,您将收到异常。

如果您需要接收一些学生,您应该创建一个方法,例如:

Student GetStudentByName(string name);
于 2012-05-03T11:20:20.493 回答
0

如果它是 WCF,那么使用 Void 方法指定 Action 也是一个很好的做法。

于 2012-05-03T11:24:56.420 回答
0

Like evryone else said, having too many method parameters is bad practice. Any way I can see only one difference between your signature and the good signature you mentioned. Having the student object as return will give you the ability of having the Id of the student after addition in db for example. Same thing applies for any other calculated properties of the object. Have a void method will force you to load the object again which means an extra trip to server in case you wanted to use the object directly after posting it. Any way having void WCF method is not bad if returning the object is nothing but an extra bandwith.

于 2012-05-03T12:00:32.657 回答