C# 在WCF中返回错误的适当方法

C# 在WCF中返回错误的适当方法,c#,vb.net,performance,wcf,iis,C#,Vb.net,Performance,Wcf,Iis,我正在使用WCF进行RESTAPI开发 我们可以通过设置返回错误代码 WebOperationContext.Current.OutgoingResponse.StatusCode 目前我使用下面的代码,因为它提供了更清晰、更直观的代码 Throw New WebFaultException(Net.HttpStatusCode.Forbidden) 但在使用此方法时,如果频繁抛出异常,IIS会将其视为快速失败,并根据快速失败保护策略停止应用程序池 这是返回错误的正确方法吗?我应该修改或关闭

我正在使用WCF进行RESTAPI开发

我们可以通过设置返回错误代码

WebOperationContext.Current.OutgoingResponse.StatusCode
目前我使用下面的代码,因为它提供了更清晰、更直观的代码

Throw New WebFaultException(Net.HttpStatusCode.Forbidden)
但在使用此方法时,如果频繁抛出异常,IIS会将其视为快速失败,并根据快速失败保护策略停止应用程序池


这是返回错误的正确方法吗?我应该修改或关闭快速失败策略还是有更好的方法?

您可以创建如下响应对象:

public class WebServiceOutput
{
    public object Data { set; get; }        
    public bool HasError { set; get; }
    public string Code { set; get; }
    public string Description { set; get; }
}
然后,您可以使用布尔值返回输出,而不是抛出异常。 电报机器人API就是一个很好的例子

您可以利用:

WebFaultException<T>(T detailedObject, HttpResponseCode code)
WebFaultException(T detailedObject,HttpResponseCode代码)
其中detailedObject是您的自定义响应对象,应该是可序列化的


参考:

您可以使用out参数,并通过异常消息或自定义表达式设置in-catch exception。 写入服务接口:

List GetResults(p1,输出字符串消息);
若要在服务接口中使用void方法,可以将方法返回类型更改为string,并将错误消息作为returen。

公共字符串保存结果(列表)
之后,在服务中使用define方法,如下所示:

public List GetResults(p1,输出字符串消息)
{
字符串消息;
OperatorClass obj=新的OperatorClass();
返回obj.GetResults(p1,输出消息);
}

是的,但这仍将被视为应用程序崩溃,IIS仍将触发快速故障保护。是的,好主意。但是,服务客户机必须打开数据,并使用状态代码检查对代码进行额外检查。对于序列化,我们还需要为每个新合同使用KnownType注释数据。亲爱的@RaviVadera。关于客户端的错误检查,您是绝对正确的。但这不是一件坏事。这很常见。我们需要在调用web服务后验证输出。但是关于KnownType,我猜你不理解KnownType的概念。你根本不需要用KnownType注释数据。因此,只要DataContract的每个属性都用DataMember属性注释,我们就不需要KnownType,对吗?亲爱的@RaviVadera,如果你希望服务接受并返回继承的类型,那么我们就使用KnownType属性。您可以使用泛型类型来实现WebServiceOutput类。
List<MyClass> GetResults(p1, out string message);
public string SaveResults(List<MyClass>)
public List<MyClass> GetResults(p1, out string message)
{
   string message;
   OperatorClass obj= new OperatorClass();
   return obj.GetResults(p1,out message);
}