Wcf服务如何以同样的方法返回不同的对象

我的Wcf服务有以下接口;Wcf服务如何以同样的方法返回不同的对象

[ServiceContract] 

public interface IService

{

[OperationContract]

[XmlSerializerFormat]

[WebInvoke(Method = "POST", UriTemplate = "/GetTypes", BodyStyle = WebMessageBodyStyle.Bare)]

object GetTypes(RequestObject RequestObject);

}

我的服务看起来像这样;

public class Service : IService 

{

public static GetTypes(RequestObject RequestObject)

{

if(RequestObject.Validate)

{

//create a new response obj, and return it

ResponseObj oResponseObj = new ResponseObj();

//get some data from data source and populate object, then return it

return oResponseObj;

}

else

{

//error response

ErrorResponseObj oErrorResponseObj = new ErrorResponseObj();

oErrorResponseObj.ErrorId = 1;

oErrorResponseObj.ErrorMessage = "There was a error";

return oErrorResponseObj;

}

}

}

我响应对象

[DataContract] 

public class ResponseObj

{

[DataMember]

public int Id {get;set;}

[DataMember]

public List<string> Names {get;set;}

}

我也有喜欢

[DataContract] 

public class ErrorResponseObj

{

[DataMember]

public int ErrorId {get;set;}

[DataMember]

public string ErrorMessage {get;set;}

[DataMember]

public string MessageImportance {get;set;}

}

如何最好的,我应该回到这些不同对象的WCF方法的错误响应。我应该返回类型对象吗?或者有更好的选择,或者这是正确的方法。

回答:

标准的方式做这样的事情是使用FaultContractAttribute。错误合约允许您指定将在SOAP Fault内返回的备用响应。 Philippe Truche给出了一个很好的例子,说明这些线在on his blog上的外观。

实例接口:

[ServiceContract] 

interface IService

{

[OperationContract]

[FaultContract(typeof(ErrorResponseObj))]

ResponseObj GetObj();

}

服务:

class Service : IService 

{

public ResponseObj GetObj()

{

if (success)

{

return new ResponseObj();

}

else

{

throw new FaultException<ErrorResponseObj>(new ErrorResponseObj()

{

ErrorMessage = "Something Happened"

})

}

}

}

的客户端可以通过捕获FaultException<ErrorResponseObj>处理故障:

var serviceProxy = new ServiceProxy(); 

try

{

var dataObj = serviceProxy.GetObj();

}

catch (FaultException<ErrorResponseObj> error)

{

ErrorResponseObj detail = error.Detail;

Console.WriteLine(detail.ErrorMessage);

}

回答:

你可以聚合成一个类型:

[DataContract] 

public class ResponseObj

{

[DataMember]

public int ErrorId {get;set;}

[DataMember]

public string ErrorMessage {get;set;}

[DataMember]

public string MessageImportance {get;set;}

[DataMember]

public int Id {get;set;}

[DataMember]

public List<string> Name {get;set;}

}

然后你会检查是否ErrorID中> 0,否则没有任何错误。

另一种方法是抛出一个错误异常在WCF服务,所以它会在 客户端处理:

http://blogs.msdn.com/b/endpoint/archive/2011/01/14/wcf-spike-faultcontract-faultexception-lt-tdetail-gt-and-validation.aspx

以上是 Wcf服务如何以同样的方法返回不同的对象 的全部内容, 来源链接: utcz.com/qa/264834.html

回到顶部