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

时间:2016-12-26 10:35:33

标签: c# vb.net performance wcf iis

我正在使用WCF进行REST API开发。

我们可以通过设置

返回错误代码
jaxb2-annotate-plugin-support

目前我使用以下内容,因为它提供了更清晰,更明显的代码

WebOperationContext.Current.OutgoingResponse.StatusCode

但是在使用此方法时,如果频繁抛出异常,IIS会将其视为快速失败并根据快速失败保护策略停止应用程序池。

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

3 个答案:

答案 0 :(得分:2)

您可以利用:

WebFaultException<T>(T detailedObject, HttpResponseCode code)

其中detailedObject是您的自定义响应对象,应该是可序列化的。

参考:http://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx

答案 1 :(得分:1)

你可以像这样创建一个响应对象:

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

答案 2 :(得分:1)

您可以使用out参数并使用异常消息或自定义表达式设置catch异常。 写入服务界面:

$('body').on('select2:open', '.resCombo', function (event) {
    var $el = $(event.target);
    $el.find('option').removeAttr('disabled');
    $('.resCombo').not($el).find('option:selected').each(function (index,el) {
       console.log($(el).val());
       $el.find('option[value="'+ $(el).val() +'"]').attr('disabled','disabled');
     })
  $el.trigger('change.select2');
});

如果要在服务接口中使用void方法,可以将方法返回类型更改为string,并将错误消息作为returen。

List<MyClass> GetResults(p1, out string message);

之后,在服务中使用define方法,如下所示:

public string SaveResults(List<MyClass>)