5

WCF Rest サービスでエラーを効果的に処理するために使用するクラスとして、WebServiceHost2Factory への参照をいくつか見てきました。どうやらそのクラスでは、WebProtocolException をスローするだけで済み、応答の本文には関連情報が含まれていました。

そのクラスは今では人気がなくなったようです。.NET 4 スタックのどこかに代替品はありますか?

何か問題が発生した場合に、POST 操作への応答の本文でエラー テキストを返す方法を見つけようとしています。重要な質問は、すべての * の横にあります

例:

[Description("Performs a full enroll and activation of the member into the Loyalty program")]
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/fullenroll/{clientDeviceId}",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json)]
public MemberInfo FullEnroll(string clientDeviceId, FullEnrollmentRequest request)
{
    Log.DebugFormat("FullEnroll. ClientDeviceId: {0}, Request:{1}", clientDeviceId, request);
    MemberInfo ret = null;
    try
    {
      //Do stuff
    }
    catch (FaultException<LoyaltyException> fex)
    {
        Log.ErrorFormat("[loyalty full enroll] Caught faultexception attempting to full enroll. Message: {0}, Reason: {1}, Data: {2}", fex.Message, fex.Reason, fex.Detail.ExceptionMessage);
        HandleException("FullEnroll", fex, fex.Detail.ExceptionMessage);
    }
    catch (Exception e)
    {
        Log.ErrorFormat(
            "[loyalty full enroll] Caught exception attempting to full enroll. Exception: {0}", e);
        HandleException("FullEnroll", e);
    }
    return ret;
}


/// <summary>
/// Deals w/ the response when Exceptions are thrown
/// </summary>
private static Exception HandleException(string function, Exception e, string statusMessage = null)
{
    // Set the return context, handle the error
    if (WebOperationContext.Current != null)
    {
        var response = WebOperationContext.Current.OutgoingResponse;

        // Set the error code based on the Exception
        var errorNum = 500;
        if (e is HttpException)
            errorNum = ((HttpException)e).ErrorCode;

        response.StatusCode = (HttpStatusCode) Enum.Parse(typeof (HttpStatusCode), errorNum.ToString());
        response.StatusDescription = statusMessage;
        // ****************************************************
        // How can I return this as the body of the Web Method?
        // ****************************************************
        WebOperationContext.Current.CreateTextResponse(statusMessage);
    }

    return (e is HttpException) ? e : new HttpException(500, string.Format("{0} caught an exception", function));
}
4

1 に答える 1

4

この回答は、次の使用を示唆しているようです。

HttpContext.Current.Response.Write(statusMessage);

編集-コメントに記載されている tobybAspNetCompatibilityが必要です。

オンにする方法は次のとおりです。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <!--  ...  -->
</system.serviceModel>
于 2013-03-17T17:44:10.177 に答える