C# Client Side Web Proxy에서 아웃 바운드 및 인바운드 비누 메시지를 가로 채는 방법
-
11-09-2019 - |
문제
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로 전달할 수 있습니다.
다른 팁
나는 두 가지 트릭을 제안합니다 :
- 프록시 서브 클래스 및 메소드 과부하 (약간 지루하지만이 프로젝트에서와 같이 코드를 생성 할 수 있습니다. http://ftwsf.codeplex.com/)
- 비동기 서명을 사용하고 각 메소드의 '완료된'이벤트를 서브하여 (많은 코드에 쓰는 것을 피하기 위해 반사를 통해이를 수행 할 수 있음)
이 트릭에 대한 자세한 정보가 필요하면 알려주십시오.
WCF를 고객 기술로 사용하는 것이 좋습니다. 그런 다음 WCF 메시지 수준 추적을 사용하여 들어오는 메시지를 기록하고 나가는 메시지를 기록 할 수 있습니다. 이것은 단순히 구성을 통해 이루어집니다.
ASMX 서비스를 사용하고 있기 때문에 ASMX 클라이언트를 사용해야 할 이유가 없습니다.