C# Client Side Web Proxy에서 아웃 바운드 및 인바운드 비누 메시지를 가로 채는 방법

StackOverflow https://stackoverflow.com/questions/1660759

문제

ASMX 웹 서비스를 테스트하기 위해 UI를 작성하고 있습니다. 서버와 클라이언트는 .NET입니다. 클라이언트 프록시는 wsdl.exe를 사용하여 생성되었습니다.

나가고 들어오는 현악기 표현을 가로 채고 저장하고 싶습니다. 비누 웹 프록시에서 메소드를 호출 한 결과로 생성 된 메시지이므로 방금 보내거나받은 메시지를 표시하는 UI에 기능을 추가 할 수 있습니다.

나는 코드를 추가하여 메시지를 강화하기 위해 코드를 추가 할 수있는 두 쌍의 확장 지점이 있음을 희미하게 생각하지만, 이것이 어떻게 수행되었는지 기억할 수 없습니다. 내가 생각한 예제는 클라이언트의 메시지의 일부를 압축하는 것과 서버의 반대 방향을 압축하는 것과 관련이 있다고 생각합니다. 시나리오에서는 메시지를 변경하기보다는 저장하고 싶지만.

모든 힌트와 감사하게받는 데 도움이됩니다.

(나는 soapextension을 부분적으로 구현했다. 나는 체인 스트림 방법이 어떻게 작동하는지 이해하지 못하고, 청취자에게 비누 메시지가 갇혀 있음을 알리는 방법을 잘 모르겠다 (비누를 인스턴스화하지 않기 때문에 확대).'

도움이 되었습니까?

해결책

당신은 soapextension으로 올바른 길을 가고 있습니다. 여기서 문서와 예를 보셨습니까? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx

Chainstream의 아이디어는 요청이 기록 될 네트워크 스트림을 통과하고 다른 스트림을 반환 할 수있는 옵션이 있다는 것입니다. 따라서 요청 사본을 저장하려면 웹 서비스 클라이언트가 요청을 작성하는 MemoryStream을 반환 한 다음 ProcessMessage Call에서 데이터를 복사하여 UI로 전달할 수 있습니다.

다른 팁

XML을 캡처하는 또 다른 방법은 Wireshark 신청. 통신 네트워크 카드를 가로칩니다.

제 경우에는 그의 주소의 일부로 String에있는 서비스를 불렀습니다. piosos. 찾기 패킷 창을 사용하여 검색했습니다.

그런 다음 XML을 찾습니다.

사진을 참조하십시오.

(알아요 ... 프로그래밍 방식이 아니지만 가치가 있습니다. LOL)

enter image description here

나는 두 가지 트릭을 제안합니다 :

  • 프록시 서브 클래스 및 메소드 과부하 (약간 지루하지만이 프로젝트에서와 같이 코드를 생성 할 수 있습니다. http://ftwsf.codeplex.com/)
  • 비동기 서명을 사용하고 각 메소드의 '완료된'이벤트를 서브하여 (많은 코드에 쓰는 것을 피하기 위해 반사를 통해이를 수행 할 수 있음)

이 트릭에 대한 자세한 정보가 필요하면 알려주십시오.

WCF를 고객 기술로 사용하는 것이 좋습니다. 그런 다음 WCF 메시지 수준 추적을 사용하여 들어오는 메시지를 기록하고 나가는 메시지를 기록 할 수 있습니다. 이것은 단순히 구성을 통해 이루어집니다.

ASMX 서비스를 사용하고 있기 때문에 ASMX 클라이언트를 사용해야 할 이유가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top