在为wcf客户端提供调用结果时,有什么更好的方法。
1。将结果包装在对象中
public enum DefinedResult : short {
Success = 0,
TimeOut = 1,
ServerFailure = 2,
UserNotFount = 3,
Uknown = 4,
//etc.
}
[DataContract]
public class ServiceResult {
readonly DefinedResults dResult;
public ServiceResult(DefinedResult result) {
this.dResult = result;
}
[DataMember]
public bool IsSuccess
{
get {return this.dResult == DefinedResult.Success;}
}
}
//Client:
WcfClient client = new WcfClient();
ServiceResult result = client.DoWork();
2。抛出自定义异常:
[Serializable]
public UserNotFoundException: Exception {
public UserNotFoundException(string message): base(message) {}
}
//client:
WcfClient client = new WcfClient();
try {
result = client.DoWork();
}
catch(FaultException<ExceptionDetail> ex) {
switch(ex.Detail.Type)
{
case "MyCompany.Framework.Exceptions.UserNotFound":
//handle
break;
case "MyCompany.Framework.Exceptions.ServerError":
//handle
break;
}
}
现在,客户端可以是另一个.net进程(服务器端),或者java脚本可以调用相同的服务,因此问题 - 其中一个(或者可能有更好的东西)是一个更好的方法让客户知道电话发生了什么?
答案 0 :(得分:4)
首先,它取决于:如果要返回非常例的条件,则使用结果值。否则,请使用例外。在WCF中,它是这样的:
创建自定义异常类:
[DataContract]
class MyException : FaultException<mydetails>
定义您的服务会抛出它:
[FaultContract(...)]
void mymethod()...
您的服务方法 throw MyException
然后,您可以在catch FaultException<mydetails>
这是最好的方式。
答案 1 :(得分:1)
WebHttpBinding吞并了FaultExceptions(JSON / REST服务需要)。在这种情况下,如果您想为您的客户提供详细的信息,那么选项1会更好。
如果JSON没有阻碍,我会推荐选项2。