В настоящее время я переношу свой сервис WCF RESTful из .NET 3.5 (Starter Kit) в .NET 4. Я начал свой проект с использованием шаблона службы WCF Rest из Visual Studio 2010. Мне нужно было выяснить, как сохранить мою схему авторизации (с помощью RequestInterceptor) с помощью ServiceAuthorizationManager. После некоторой работы и исследований я сделал это. Но теперь у меня есть побочная проблема. Мой сервис использовался для обратной связи моего клиента с любыми ошибками обработки с использованием кода состояния HTTP и краткого описания. Я использовал WebOperationContext во многих точках моего метода обслуживания, чтобы описать клиентам то, что пошло не так, как это:Служба WCF 4 REST не может вернуть StatusDescription, только StatusCode
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?
Самостоятельно или IIS? Какая версия сервера? Я протестировал это на 4.0 с самообслуживанием Server 2008R2, и он отлично работает (возвращает описание статуса как установлено). – nitzmahone
Вы когда-нибудь находили решение? Я столкнулся с той же проблемой. – Hemant