메서드 호출에 대한 개체를 허용하는 Wcf (ajax 활성화) 서비스가 있습니다. 내 Wcf 방법은 다음과 같습니다.
[OperationContract]
[XmlSerializerFormat]
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
XElement XMLGetTypes(TypeRequest TypeRequest)
{
return Utilities.Convert.ObjectToXElement(TypeRequest.Execute(TypeRequest));
}
'TypeRequest'객체는 다음과 같습니다.
public class
{
public int Id {get;set;}
public string Name {get; set;}
}
내가 가진 문제는 같은 요청 개체에서와 같이 잘못된 데이터로 메서드를 호출하는 경우입니다.
<TypeRequest>
<Id>abc</Id>
<Name>Joe King</Name>
</TypeRequest>
보시다시피 Id는 정수 여야하지만 문자열로 전달됩니다. 이로 인해 Wcf 서비스에서 잘못된 요청 400 응답이 발생합니다.
이상적으로는 오류를 처리하고 적절한 응답을 반환하고 싶습니다. 예를 들어 오류 정보가 포함 된 JSON 또는 XML 응답을 반환하고 싶습니다.
이것이 가능한가 ?
IIS를 사용하면 파이프 라인 전체에서 오류 처리기를 만들 수 있습니다. 코드를 처리하는 방법과 반환하는 내용은 IIS 응용 프로그램의 모든 오류를 처리하므로주의해야하지만 사용자에게 달려 있습니다.
public class ErrorHttpHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString.Count == 0)
return;
string strStatusCode = context.Request.QueryString[0].Split(';').FirstOrDefault() ?? "500";
int statusCode = 500;
int.TryParse(strStatusCode, out statusCode);
string message = "Unhandled server error.";
switch (statusCode)
{
case 400:
message = "Bad request.";
break;
case 404:
message = "Item not found.";
break;
}
context.Response.StatusCode = statusCode;
context.Response.Write(string.Format("<Error><Message>{0}</Message></Error>", message));
}
}
web.config에서 핸들러를 호출하려면 다음 코드를 추가하십시오.
<system.webServer>
<httpErrors errorMode="Custom">
<clear/>
<error statusCode="404" path="/application/ErrorHandler" responseMode="ExecuteURL"/>
<error statusCode="400" path="/application/ErrorHandler" responseMode="ExecuteURL"/>
</httpErrors>
<handlers>
<add name="ErrorHandler" path="ErrorHandler" verb="*" type="Your Application.ErrorHttpHandler, FrameworkAssembly"/>
</handlers>
</system.webServer>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다