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





Вы можете сделать это, создав 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, это навязано мне.
Ах, прости, Роб, я пришел к выводу, что вы работали на стороне WebService.
Это веб-приложение?
Поместите код SoapExtension в HTTPModule и вставьте конверт SOAP в поток HTTPOutput.
Таким образом, в режиме отладки я представляю что-то вроде сворачиваемого блока div в верхней части страницы, в котором перечислены все сообщения SOAP для этой страницы.
У меня уже есть HTTPModule, который делает это, я вычеркну информацию о моей компании и опубликую все полезности сегодня же.
Также обратите внимание на SoapUI, это удобный инструмент.
Кажется, это частый вопрос, поскольку я только что его задал, и мне сказали посмотреть здесь.
Вам не нужно редактировать сгенерированный Reference.cs. Вы можете указать расширение в app.config вашего приложения.
Я не вижу, куда бы я поместил вызов этого метода. Я также вижу здесь ссылку на HttpContext. Я звоню по веб-запросу, но не получаю его. Или, другими словами, я использую чужой веб-сервис. Меня спросили, какой именно SOAP я им отправлял, и тот SOAP, который мне вернули из их службы.