2010-04-01 2 views
0

.NET 3.5 클라이언트 (WinForm)에서 타사 공급 업체의 외부 SSL 웹 서비스를 호출하고 있습니다. 벤더는 비누 헤더를 보내서 사물이 왜 작동하지 않는지 확인해달라고 요청했습니다.캡쳐 SOAP 봉투 (C# WinForm .ASMX 외부 공급 업체 서비스)

WireShark를 사용하여 패킷을 캡처했지만 웹 서비스가 SSL이므로 패킷이 암호화됩니다.

C# 클라이언트에 Soap Envelope를 저장하거나 표시하기 위해 몇 가지 마술 코드를 추가 할 수 있습니까?

답변

1

정확히 웹 서비스에 액세스하고 있습니까? WCF 또는 다른 메커니즘을 사용하고 있습니까?

항상 작동해야하는 한 가지 방법은 Fiddler입니다. 기본적으로 프록시처럼 작동하여 클라이언트와 웹 서비스 (또는 모든 HTTP 호출) 사이의 호출을 차단 한 다음 요청 및 응답의 내용을 제공합니다.

거기에서 SOAP 봉투를 가져 와서 공급 업체에 보낼 수 있습니다.

WCF를 사용하는 경우 사용자 지정 끝점 동작을 사용하여 IClientMessageInspector 구현을 삽입 할 수 있습니다. 이 구현은 응답을받은 후에 (BeforeSendRequest 메서드 구현을 통해) 요청을 서버에 보내고 (AfterReceiveReply 메서드 구현을 통해) SOAP 요청의(SOAP 봉투의 개체 표현) 인스턴스에 대한 액세스 권한을 갖습니다.).

+0

Fiddler (필 더러가하지 않은 로컬 패킷을 캡처하기 때문에 WireShark로 전환 했음)를 잊어 버렸습니다. 내 제목,하지만 질문을 asmx했다. 나는 "Add Web Ref"를하고 .asmx의 프록시를 호출했다. 실제로 .asmx에 서비스 참조를 추가하고 WCF를 사용할 수 있습니까? 조금 이상하게 들릴 수 있습니다. – NealWalters

+0

관리자 탭에서 xml의 하위 탭을보고 비어 있습니다. Soap Header가 없다는 뜻인가요? 사실 그들은 전체 SOAP 메시지를 요구하고있었습니다. 나는 Fiddler에서 내 요청을 받았지만 여전히 그것을 모두 보지 못했습니다. – NealWalters

+0

피들러 옵션 "트래픽 해독"확인란을 선택한 다음이 오류가 발생했습니다. 기본 연결이 닫혔습니다 : SSL/TLS 보안 채널에 대한 트러스트 관계를 설정할 수 없습니다. – NealWalters

1

.NET 2.0에서는 Web Service Extensions 3.0을 사용하고 PolicyAssertion과 SoapFilter를 구현했습니다. ProcessMessage 함수는 비누 헤더와 본문을 저장/수정하기위한 완벽한 액세스를 제공합니다.

+0

감사합니다. 나는 오버라이드 (override) 메소드의 좋은 예를 발견했다. 그러나 그것을 묶을 클래스가 무엇인지는 확실치 않다. 내 기존 프록시의 일부 클래스와 관련이 있습니까? – NealWalters

+0

WSE3UTIL.exe를 사용하여 내가 소비 한 서비스에 대한 서비스 프록시를 생성했습니다. 필자는 모든 것을 별도의 프로젝트에 넣은 다음, 프로젝트를 소비하는 프로젝트에서 해당 프로젝트를 참조했다. 왜냐하면 컴파일 시간을 단축하기 때문이다. 함께 묶는 것은 정책 구성 파일에서 수행됩니다. 구성에 정책을 작성하고 PolicyAssertion을 구현하는 유형을 지정해야합니다. 예를 찾을 수없는 경우 알려주십시오. 그러면 퍼즐의 마지막 부분이 이것입니다. 서비스 클래스를 인스턴스화 할 때 SetPolicy를 호출하고 정책 구성에서 정의한 이름을 전달해야합니다. –

+0

흠 ... 지금까지는 WSE3을 사용하지 않았습니다. 지금까지 필요가 없었기 때문입니다. 전체 배관을 변경하는 대신 기존 프로그램에 몇 줄의 코드를 추가하기를 바랬습니다. 시간 투자에 가치가 있다면 여전히 논쟁 중입니다. 감사. – NealWalters

0
envelope.Save("c:\\filename.xml"); 
관련 문제