例外のために400を返して、私は次のようにErrorHandlerを実装しました:WCFは、常に私はRESTfulなWCFサービスを持っている
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>
何らかの理由で、サービスが例外をスローすると、500ではなくクライアントに400が返されます。理由は何ですか?
webconfigがありません。 –
を設定ファイルで更新してください。MyErrorHandlerElement - MyErrorHandlerにする必要がありますか? – Eric
Ericの場合、最初の項目はErrorHandlerElementです(これを含めるために私のサンプルが更新されています)。2番目の要素はアセンブリ名です。 – Bullines