문제

현재 10가지 웹 서비스를 사용하는 내부 엔터프라이즈 앱이 있습니다.WCF를 사용하는 대신 이전 스타일의 "웹 참조"를 통해 사용됩니다.

제가 겪고 있는 문제는 제가 사용하고 있는 서비스를 작성하는 회사의 다른 팀과 협력하려고 하는 것입니다.나는 보내고 받는 정확한 SOAP 메시지를 캡처해야 한다는 것을 알았습니다.SoapExtensionAttribute를 확장하는 새 특성을 생성하여 이 작업을 수행했습니다.그런 다음 생성된 Reference.cs 파일의 서비스 메서드에 해당 특성을 추가합니다.이것은 효과가 있지만 두 가지 이유로 고통스럽습니다.첫째, 생성된 파일이므로 여기서 수행하는 모든 작업을 덮어쓸 수 있습니다.둘째, 파일을 체크인하기 전에 속성을 제거해야 한다는 점을 기억해야 합니다.

내가 보내고 받는 정확한 SOAP 메시지를 캡처하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

제가 방금 물어보고 살펴보라고 했기 때문에 이것은 일반적인 질문인 것 같습니다. 여기.

생성된 내용을 편집할 필요는 없습니다. Reference.cs.애플리케이션에서 확장을 참조할 수 있습니다. app.config.

다른 팁

이거 웹앱인가요?

SoapExtension 코드를 HTTPModule에 배치하고 SOAP 봉투를 HTTPOutput 스트림에 삽입합니다.

그런 식으로 디버그 모드에 있을 때 페이지 상단에 해당 페이지에 대한 모든 SOAP 통신을 나열하는 축소 가능한 div와 같은 그림이 그려집니다.

저는 이 작업을 수행하는 HTTPModule을 이미 구축했습니다. 회사 관련 정보를 제거하고 오늘 나중에 유용한 정보를 게시하겠습니다.

또한 편리한 도구인 SoapUI를 확인해 보세요.

SoapExtention을 생성하면 이 작업을 수행할 수 있습니다.확인하다 이 기사.

다음 코드는 얼마 전에 작성된 애플리케이션에서 SOAP 요청을 캡처한 방법의 예입니다.

<System.Diagnostics.Conditional("DEBUG")> _
    Private Sub CheckHTTPRequest(ByVal functionName As String)
        Dim e As New UTF8Encoding()

        Dim bytes As Long = Me.Context.Request.InputStream.Length
        Dim stream(bytes) As Byte
        Me.Context.Request.InputStream.Seek(0, IO.SeekOrigin.Begin)
        Me.Context.Request.InputStream.Read(stream, 0, CInt(bytes))

        Dim thishttpRequest As String = e.GetString(stream)

        My.Computer.FileSystem.WriteAllText("D:\SoapRequests\" & functionName & ".xml", thishttpRequest, False)

    End Sub

내가 한 것처럼 조건부 속성을 설정하면 컴파일러는 디버그 이외의 모든 빌드 유형에 대한 메서드 호출을 무시합니다.

VB에 대해 죄송합니다. 강제로 발생합니다.

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