2010-01-21 2 views
3

에서 비누 요청인지 확인하십시오. 요청이 HttpApplication의 AuthenticateRequest 이벤트에 대한 비누 요청인지 아는 방법이 있습니까? ServerVariables [ "HTTP_SOAPACTION"]가 항상 작동하지 않는 것 같아요.HTTP 요청이 HttpApplication.AuthenticateRequest

public void Init(HttpApplication context) { 
    context.AuthenticateRequest += new EventHandler(AuthenticateRequest); 
} 

protected void AuthenticateRequest(object sender, EventArgs e) { 
    app = sender as HttpApplication; 
    if (app.Request.ServerVariables["HTTP_SOAPACTION"] != null) { 
     // a few requests do not enter here, but my webservice class still executing 
     // ... 
    } 
} 

web.config 파일에서 webservices 용 HTTP POST 및 HTTP GET이 비활성화되었습니다. 비누 + XML의 ContentType을 보면

<webServices> 
    <protocols> 
     <remove name="HttpGet" /> 
      <remove name="HttpPost" /> 
     <add name="AnyHttpSoap" /> 
    </protocols> 
</webServices> 

부분적으로 만 내 문제를 해결합니다. 예를 들어, 대신에 표준 헤더의 SOAPAction을 갖는

Cache-Control: no-cache 
Connection: Keep-Alive 
Content-Length: 1131 
Content-Type: text/xml 
Accept: */* 
Accept-Encoding: gzip, deflate 
Accept-Language: ro 
Host: localhost 
mymethod: urn:http://www.wsnamespace.com/myservice 

일부 고객 : "http://www.wsnamespace.com/myservice/mymethod는"위의 예에서와 같이가 someting있다. "mymethod"는 [WebMethod] 속성이있는 웹 서비스 클래스의 메서드를 나타내고 "http://www.wsnamespace.com/myservice"은 webservice의 네임 스페이스입니다. 여전히 서비스는 완벽하게 정상적으로 작동합니다. 소비자는 다른 프레임 워크 (PHP, .NET, Java 등의 NuSOAP)를 사용합니다.

답변

2

당신이 경우 제대로

application/soap+xml; charset=utf-8 

UTF-8 환경 부분이 존재하지 않을 수 있어야한다 클라이언트에 의해 설정 Request.ContentType 재산 볼 수 있었다.

그 외에도 확실하게 URL을 확인할 수 있으며 웹 서비스 인 경우 그 내용이 무엇인지 알려줍니다.

+0

웹 서비스 호출과 자동 생성 된 HTML 문서 (동일한 URL을 가짐) 사이에 차이점을 만들고 싶습니다. 어쩌면 내 경우에는 .asmx 확장자를 확인한 다음 text/xml, application/xml, aplication/soap + xml 등의 ContentType을 확인할 수 있습니다. – Vasea

0

항상 웹 서비스에 자체 포트를 제공합니다. 그렇게하면 포트 80을 통해 제공되는 모든 HTTP 요청을 필터링 할 필요가 없습니다. 또는 브라우저 지향적 인 문제의 경우 포트 80을 필터링하고 다른 유형의 공격의 경우 SOAP/SOA 포트를 필터링 할 수 있습니다.

IMAO를 사용하면 민감한 비즈니스 데이터를 공용 데이터와 섞어서 방화벽에 다른 구멍을 열 필요가 없으므로 먼저 방화벽이있는 바로 그 이유 때문에 코를 엄지 손가락으로 조입니다.

0

더 엄격한 경로로 이동하여 HTTP 헤더 아래에있는 다른 모든 것을 기반으로 계산할 수도 있습니다. 내가 즉 뜻 게다가, SOAP 요청 본문 인, 아래와 같은 것들을 분석 -

<soap:Envelope xmlns:soap="..." soap:encodingStyle="..."> 

IBM

0

... 요청의 일부로 시스템을 테스트했습니다. Web.HttpContext.Current.Request.CurrentExecutionFilePathExtension ?? 일반적으로 서비스를 처리하는 한 webservices (json 및 xml)의 경우 .asmx가됩니다.

0

다음 코드를 사용하여 요청 유형을 식별합니다. 그것이 당신의 requirment와 일치하는 경우이보십시오. 도움이된다면 답을 표시하십시오.

if (request.Headers["SOAPAction"] != null || request.ContentType.StartsWith("application/soap+xml")) 
    return ServiceRequestTypes.SoapRequest; 
else if ("POST".Equals(request.RequestType, StringComparison.InvariantCultureIgnoreCase) && request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.InvariantCultureIgnoreCase)) 
    return ServiceRequestTypes.HttpPostRequest; 
else if ("POST".Equals(request.RequestType, StringComparison.InvariantCultureIgnoreCase) && request.ContentType.StartsWith("application/json", StringComparison.InvariantCultureIgnoreCase)) 
    return ServiceRequestTypes.AjaxScriptServiceRequest; 
return ServiceRequestTypes.Unknown; 
관련 문제