Для использования этого решения необходимо использовать функцию «Добавить ссылку на службу», а не функцию «Добавить ссылку на веб-страницу», ее можно использовать, если служба ASMX или WCF.(Для использования этой функции необходимо использовать .NET Framework 3.X)
Эта статья поможет вам добавить ссылку на службу в ваш проект C #.
ДляПерехват и XML запроса и ответа, Реализуйте эти два класса:
public class InspectorBehavior : IEndpointBehavior
{
public string LastRequestXML {
get
{
return myMessageInspector.LastRequestXML;
}
}
public string LastResponseXML {
get
{
return myMessageInspector.LastResponseXML;
}
}
private MyMessageInspector myMessageInspector = new MyMessageInspector();
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(myMessageInspector );
}
}
public class MyMessageInspector : IClientMessageInspector
{
public string LastRequestXML { get; private set; }
public string LastResponseXML { get; private set; }
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
LastResponseXML = reply.ToString();
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
LastRequestXML = request.ToString();
return request;
}
}
Затем измените код вызова на:
MyTestServiceSoapClient client = new MyTestServiceSoapClient();
var requestInterceptor = new InspectorBehavior();
client.Endpoint.Behaviors.Add(requestInterceptor );
client.DoSomething("param1", "param2", "param3");
string requestXML = requestInterceptor.LastRequestXML;
string responseXML = requestInterceptor.LastResponseXML;
**** РЕДАКТИРОВАТЬ ****Это не связано с серверной технологией, вы можете использовать ее с веб-службами WCF, ASMX, PHP, ..., на которых я тестировал: http://www.w3schools.com/webservices/tempconvert.asmx
И получил следующие XML:
requestXML =
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/CelsiusToFahrenheit</Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CelsiusToFahrenheit xmlns="http://tempuri.org/">
<Celsius>50</Celsius>
</CelsiusToFahrenheit>
</s:Body>
</s:Envelope>
responseXML =
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
<soap:Body>
<CelsiusToFahrenheitResponse xmlns="http://tempuri.org/">
<CelsiusToFahrenheitResult>122</CelsiusToFahrenheitResult>
</CelsiusToFahrenheitResponse>
</soap:Body>
</soap:Envelope>
**** EDIT 2 ****
«Добавить веб-ссылку» не специализируется для ASMXи не является технологией на стороне клиента ASMX, а «Добавление справочника услуг» не является технологией на стороне клиента WCF, вы можете использовать оба варианта для добавления ссылки на веб-службу ASMX, WCF, JSP или PHP, вам нужноваше приложение для использования .Net Framework 3.5 для использования «Добавить ссылку на службу».
В этой статье упоминается:
При использовании диалогового окна «Добавить веб-ссылку» в Visual Studio клиентский прокси-сервер создается с использованием информации WSDL и добавляется в проект Visual Studio.Обычно это используется для служб ASMX, но вы также можете использовать диалоговое окно Добавить веб-ссылку для создания клиентского прокси для служб WCF.Однако вам необходимо вручную ввести URL-адрес службы, и сгенерированный прокси-сервер использует сериализацию XML, которая является единственным поддерживаемым типом сериализации.Чтобы создать клиентские прокси для служб WCF, которые поддерживают сериализатор контрактов данных, можно использовать инструмент Svcutil.exe или использовать функцию «Добавить ссылку на службу» в средствах разработки Visual Studio для .NET Framework 3.x.