Я очень плохо знаком с WCF и обменом сообщениями SOAP, но мне удалось соединить довольно хороший клиент, который я использую для загрузки новостей со средства массовой информации. Я генерировал прокси-классы, которые, очевидно, абстрактный много далеко и означают, что я в основном просто создаю объекты, вызывающие методы и выполняю итерации через результаты.
Моя проблема - то, что у меня есть необработанные примеры XML того, на что должны быть похожими вызовы к веб-сервису, и я хочу смочь "сравнить" их с вызовами, которые я выполняю. В основном я должен удостовериться, что вызовы, которые я выполняю, совпадают с XML-файлами в качестве примера для тестирования.
Что я прошу иметь смысл, или я иду об этом неправильным путем? Сообщите мне, существует ли необходимая информация, которую я не учел, я мог барабанить для абзацев, но не уверен, какая информация релевантна.
Использовали ли вы инструмент Service Trace Viewer от Microsoft? Эта страница MSDN предоставит вам подробную информацию о том, как его использовать.
The stock answer for this is to use fiddler as a proxy - this will allow you to view the outgoing and incoming messages between your client and the service.
Can't yet speak from personal experience, however team members developing for me (in a former life) have - quite rightly - coded up our service wrappers with built in support for use of a proxy explicitly to simplify use of fiddler.
Вы можете создать свой собственный инспектор сообщений с помощью интерфейса IClientMessageInspector и получать необработанные сообщения как для запроса, так и для ответа.
Вот хороший пост о том, как это сделать это ==> http://www.keithelder.net/blog/archive/2008/01/15/How-to-Get-Around-WCFs-Lack-of-a-Preview-Web.aspx
Вы можете использовать трассировку WCF для регистрации необработанных сообщений XML. Следующее: .config
включает трассировку WCF с ведением журнала необработанных сообщений:
<configuration>
<system.serviceModel>
<diagnostics>
<messageLogging maxMessagesToLog="30000"
logEntireMessage="true"
logMessagesAtServiceLevel="true"
logMalformedMessages="true"
logMessagesAtTransportLevel="true">
</messageLogging>
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.IdentityModel" switchValue="Verbose" logKnownPii="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- Log all messages in the 'Messages' tab of SvcTraceViewer. -->
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- ActivityTracing and propogateActivity are used to flesh out the 'Activities' tab in
SvcTraceViewer to aid debugging. -->
<source name="System.ServiceModel" switchValue="Error, ActivityTracing" propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- This records Microsoft.IdentityModel generated traces, including exceptions thrown
from the framework. -->
<source name="Microsoft.IdentityModel" switchValue="Warning">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.e2e" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
Дополнительные сведения о трассировке WCF можно найти в MSDN: Настройка трассировки .
Microsoft предоставляет Инструмент Service Trace Viewer для чтения файлов .svclog.
Убедитесь, что путь, указанный в initializeData
, доступен для записи вашей службой.
Я мало что знаю о WCF, но вы можете перенаправить ваше соединение на другой веб-сервер в вашей сети, который зарегистрировал тело где-нибудь. Это позволит вам увидеть, что именно вы посылаете, но потребует некоторой работы с инфраструктурой. Это может быть веб-сервер, запущенный на вашей машине разработки.