我正在开发分布式应用程序。其中包含我必须验证的角色和权限集。
抛出异​​常(例如未经授权的访问)是一个好习惯吗?
还是应该向客户发送一些消息?

最佳答案

在您的服务操作中,您可以指定 FaultContract ,它将同时满足两个目的:

[OperationContract]
[FaultContract(typeof(MyServiceFault))]
void MyServiceOperation();

请注意,必须以与复杂类型相同的方式用MyDataFault标记DataContract和DataMember属性:
[DataContract]
public class MyServiceFault
{
    private string _message;

    public MyServiceFault(string message)
    {
        _message = message;
    }

    [DataMember]
    public string Message { get { return _message; } set { _message = value; } }
}

在服务端,您将能够:
throw new FaultException<MyServiceFault>(new MyServiceFault("Unauthorized Access"));

在客户端:
try
{
    ...
}
catch (FaultException<MyServiceFault> fault)
{
    // fault.Detail.Message contains "Unauthorized Access"
}

09-26 02:47