2012-05-03 3 views
0

.NET 3.5에서 개발 된 REST WCF 응용 프로그램이 있습니다. 나는 "IErrorHandler"인터페이스를 구현하는 클래스를 사용하고 예를 실종 매개 변수 등을 말할 같은 .NET 3.5에서 REST WCF BadRequest 오류 메시지가 발생하지 않습니다.

유효하지 않은 요청 URL을 확인합니다. 그래서 그 클래스 안에 나는 BadRequest 오류 코드 및 메시지 생성 해,이 부분의 코드가 있습니다

public void ProvideFault(Exception error, MessageVersion version, ref Message fault) 
     { 
      ExceptionHelper.HandleException(error, Severity.Error); 
      StatusResponseBE statusResponseEntity = new StatusResponseBE(); 
      statusResponseEntity.Code = STATUS_CODE_FAIL; 
      statusResponseEntity.Message = "Failed to perform requested operation"; 
      statusResponseEntity.Errors = new ErrorResponseBECollection(); 

      if (error is SerializationException || error is InvalidOperationException) 
      { 
       statusResponseEntity.Errors.Add(new ErrorResponseBE() 
       { 
        Code = EX_INVALID_REQUEST_CODE, 
        Description = "Invalid Request" 
       }); 
       fault = Message.CreateMessage(version, string.Empty, statusResponseEntity, new DataContractJsonSerializer(typeof(StatusResponseBE))); 
       fault.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json)); 
       WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest; 
       return; 
      } 
      else 
      { 
       statusResponseEntity.Errors.Add(new ErrorResponseBE() 
       { 
        Code = EX_INTERNAL_ERROR_CODE, 
        Description = "Internal Error" 
       }); 
       fault = Message.CreateMessage(version, string.Empty, statusResponseEntity, new DataContractJsonSerializer(typeof(StatusResponseBE))); 
       fault.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json)); 
       WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError; 
       return; 

      } 

     } 

을하지만 잘못된 요청 URL 내 WCF 서비스를 타격하고 때, 나는 BadReqest 오류 코드로 무엇입니까

HTTP/1.1 400 Bad Request 
Cache-Control: private 
Content-Type: application/xml; charset=utf-8 
Server: Microsoft-IIS/7.0 
Access-Control-Allow-Origin: * 
X-AspNet-Version: 2.0.50727 
Set-Cookie: ASP.NET_SessionId=xz412e35vruepr45qjrp5lyw; path=/; HttpOnly 
X-Powered-By: ASP.NET 
Date: Thu, 03 May 2012 14:47:15 GMT 
Content-Length: 1165 

<?xml version="1.0" encoding="utf-8"?><HTML><HEAD><STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE> 
<TITLE>Request Error</TITLE></HEAD><BODY> 
<DIV id="content"> 
<P class="heading1">Request Error</P> 
<BR/> 
<P class="intro">The server encountered an error processing the request. See server logs for more details.</P> 
<P class="intro"></P> 
</DIV> 
</BODY></HTML> 

가 대신 내가 피들러에서 그쪽으로 원시 탭에서 위의 무엇입니까 :; : "잘못된 요청 메시지 (400) 코드"와 같은 뭔가 같은 응답 JSON 400가 아니라 메시지.

왜 이런 일이 벌어지고 있으며 해결할 수있는 방법이 있습니까? 그것은 나를 많이 괴롭혔다. 그리고 나는 모든 것을 시험해 보았다. 그러나 그것이해야한다고 말하는 것을 작동시키지 않는 것처럼 보인다.

답변

0

이것은 WebServiceHost의 문제점으로, 저는 여러분이 해당 서비스에 사용하고 있다고 가정합니다. WCF 나머지 스타터 키트 2에서 WebServiceHost2는 http://www.robbagby.com/rest/effective-error-handling-with-wcf-rest/

+0

감사를 시도

당신은 자세한 내용은이를 확인하실 수 있습니다 던지는 WebProtocolExceptions

하여 오류에 대한 사용자 정의 JSON 페이로드를 지정하도록해야 도움, Javi. 내 현재 응용 프로그램에 "System.ServiceModel.Activation.WebScriptServiceHostFactory"를 사용하고 있습니다. "Microsoft.ServiceModel.Web.WebServiceHost2Factory"를 사용하려고하면 응용 프로그램이 전혀 응답하지 않습니다. – Anupam

0

var message = ex.GetOriginalMessage(); 
var statusCode = (ex is MyDomainException || ex.GetType().IsSubclassOf(typeof (MyDomainException))) 
         ? HttpStatusCode.BadRequest 
         : HttpStatusCode.InternalServerError; 

var context = WebOperationContext.Current; 

if (context == null || context.IncomingRequest.ContentType.ToLower().Contains("json")) 
    throw new WebProtocolException(statusCode, statusCode.ToString(), message, null); 

throw new WebProtocolException(statusCode, statusCode.ToString(), new XElement("Detail", message), false, null); 
관련 문제