Я в настоящее время перемещаю свой УСПОКОИТЕЛЬНЫЙ сервис WCF от.NET 3.5 (Стартовый набор) к.NET 4. Я запустил свой проект с помощью сервисного шаблона Отдыха WCF из Visual Studio 2010. Я должен был выяснить, как сохранить мою схему авторизации (formely сделанной с 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. Я не могу выяснить почему. Мое единственное предположение - то, что WebOperationContext не работает в этом новом сценарии WCF 4, и я должен использовать 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;
}
Даже при помощи OperationContext direclty здесь (insted WebOperationContext), StatusDescription не работает.
Что я пропускаю здесь? Почему такая мелочь может повредиться от.NET 3.5 к 4?