現在、WCF RESTful サービスを .NET 3.5 (スターター キット) から .NET 4 に移行しています。Visual Studio 2010 の WCF Rest サービス テンプレートを使用してプロジェクトを開始しました。 RequestInterceptor で行われます) ServiceAuthorizationManager を使用します。いくつかの作業と調査の後、私はそれを成し遂げました。しかし今、私は付随的な問題を抱えています。私のサービスは、HTTP ステータス コードと簡単な説明を使用して、処理エラーをクライアントにフィードバックしていました。サービスメソッドの多くのポイントで WebOperationContext を使用して、次のようにクライアントに問題を説明していました。
protected void returnCode(HttpStatusCode code, string description)
{
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusDescription = description;
ctx.OutgoingResponse.StatusCode = code;
}
しかし、WCF 4 では、StatusCode のみが機能します - StatusDescription はサイレントに失敗します。理由がわかりません。私の唯一の推測は、この新しい WCF 4 シナリオでは WebOperationContext が機能しないということです。代わりに OperationContext を使用する必要がありますが、それも機能しません。次のメソッドは、ServiceAuthorizationManager を拡張するカスタム クラスで使用され、認証ダイジェストの形式が正しくないためにリクエストにアクセスできないことをクライアントに通知します。
private void GenerateBadDigestMessage(ref OperationContext operationContext)
{
Message reply = Message.CreateMessage(MessageVersion.None, null, null, new DataContractJsonSerializer(typeof(object)));
HttpResponseMessageProperty hrp = new HttpResponseMessageProperty();
hrp.StatusCode = HttpStatusCode.Forbidden;
hrp.StatusDescription = "bad digest";
reply.Properties[HttpResponseMessageProperty.Name] = hrp;
operationContext.RequestContext.Reply(reply);
operationContext.RequestContext = null;
}
ここで (WebOperationContext の代わりに) OperationContext を直接使用しても、StatusDescription は機能しません。
ここで何が欠けていますか?なぜこのような小さなことが .NET 3.5 から 4 に移行できるのでしょうか?