у меня есть RESTful службы WCF, и я осуществил ErrorHandler, такие как:WCF всегда возвращается 400 для исключения
public class MyErrorHandler : IErrorHandler, IServiceBehavior
{
// OMITTED: IServiceBehavior Members
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
DoSomeCustomLogging(error);
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
}
}
public class MyErrorHandlerElement : BehaviorExtensionElement
{
protected override object CreateBehavior()
{
return new MyErrorHandler();
}
public override Type BehaviorType
{
get
{
return typeof(MyErrorHandler);
}
}
}
Это зацепили в моем web.config так:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="Rest">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name ="errorHandler" type="ACME.MyErrorHandlerElement, ACME.MyErrorHandler"/>
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" faultExceptionEnabled="false" helpEnabled="false" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
По какой-то причине, если моя служба выдает исключение, 400 возвращается клиенту вместо 500. Любые идеи почему?
Ваш вебконфигурация отсутствует, пожалуйста, обновите –
в файле конфигурации, введите MyErrorHandlerElement - не должно быть MyErrorHandler? – Eric
Eric, в типе, первым элементом является ErrorHandlerElement (я обновил свой пример, чтобы включить его), а второй - имя сборки. – Bullines