WCF呼叫结果

时间:2011-01-19 20:22:44

标签: c# .net wcf json

在为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脚本可以调用相同的服务,因此问题 - 其中一个(或者可能有更好的东西)是一个更好的方法让客户知道电话发生了什么?

2 个答案:

答案 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。