Вопрос

У меня есть внутреннее корпоративное приложение, которое в настоящее время использует 10 различных веб-сервисов.Они используются через «Веб-ссылки» старого стиля вместо использования WCF.

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь работать с другими командами компании, которые создают сервисы, которыми я пользуюсь.Я обнаружил, что мне нужно точно фиксировать сообщения SOAP, которые я отправляю и получаю.Я сделал это, создав новый атрибут, расширяющий SoapExtensionAttribute.Затем я просто добавляю этот атрибут к методу службы в созданном файле Reference.cs.Это работает, но болезненно по двум причинам.Во-первых, это сгенерированный файл, поэтому все, что я в нем делаю, можно перезаписать.Во-вторых, я должен не забыть удалить атрибут перед возвратом файла.

Есть ли лучший способ зафиксировать точные сообщения SOAP, которые я отправляю и получаю?

Это было полезно?

Решение

Кажется, это распространенный вопрос, поскольку я только что задал его, и мне сказали посмотреть здесь.

Вам не нужно редактировать созданный Reference.cs.Вы можете ссылаться на расширение в своем приложении. app.config.

Другие советы

Это веб-приложение?

Поместите код SoapExtension в HTTPModule и внедрите конверт SOAP в поток HTTPOutput.

Таким образом, в режиме отладки я представляю что-то вроде складного элемента div в верхней части страницы, в котором перечислены все соединения SOAP для этой страницы.

У меня уже есть встроенный 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