Тестирование пользовательских SOAP-заголовков в ASMX

StackOverflow https://stackoverflow.com/questions/212839

  •  03-07-2019
  •  | 
  •  

Вопрос

Тестовая форма, сгенерированная ASMX, очень удобна для операций тестирования. Однако нет очевидного способа включить заголовки SOAP.

Как вы можете проверить свои заголовки, не программируя клиента на использование сервиса?

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

Решение

Если вы заботитесь о взаимодействии, не используйте клиентские приложения .net для тестирования веб-служб .net. Используйте соответствующий инструмент, такой как SOAPUI, для тестирования вашего веб-сервиса. www.soapui.org

Инструмент написан на Java, но он бесплатный и полезен для тестирования любого вида веб-сервисов.

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

Если я понимаю, что вы пытаетесь сделать, вы можете просто выполнить HTTP-запрос, используя SOAP, предоставленный вашим asmx. Если вы откроете свой asmx в браузере, вы получите список методов, доступных в вашем веб-сервисе. Нажмите на метод, который вы хотите протестировать, и вы получите SOAP-запрос, который вы можете использовать, просто введите значения, которые вы хотите протестировать. Ниже приведен код, который вы можете использовать для тестирования SOAP.

// Set SOAP Message
string msg = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope>";
...
...

// Make http request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://linktoyour/service.asmx");

req.Headers.Add("SOAPAction", "http://linktoyour/NameOfFuntion");

req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);

req.ContentLength = bytes.Length;

System.IO.Stream st = req.GetRequestStream();
st.Write(bytes,0,bytes.Length);
st.Close();

// Read response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
System.IO.Stream st1 = res.GetResponseStream();

System.IO.StreamReader sr = new System.IO.StreamReader(st1, System.Text.Encoding.UTF8);

string txt = sr.ReadToEnd();

// Display response
Response.Write(txt);

Вы спросили

  

Как вы можете проверить свои заголовки, не программируя клиента на использование сервиса?

Ответ заключается в том, что вы должны запрограммировать клиента на использование сервиса.

Разработчики, которые напишут код для использования вашего сервиса, будут вынуждены написать клиент, который использует ваш плохо разработанный, сложный в использовании сервис со странными заголовками. Лучше узнать о {плохо спроектированном, сложном в использовании, странном}, прежде чем они это сделают.

Таким образом, вы можете изменить дизайн сервиса, чтобы он был {хорошо продуман, удобен в использовании, нормален}.

Кстати, написание модульных тестов для вашего веб-сервиса - хороший способ сделать это. Таким образом, у вас есть маленькие, простые клиенты.

Вместо прямого доступа к заголовкам предоставьте абстракцию, к которой обращается ваш код. Например, если у вас есть заголовок «Клиент», вы можете предоставить контекстный класс, к которому вы можете получить доступ, например, так:

string customer = MyContext.Current.Customer;

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

Однако обратите внимание, что тестирование ASMX вне веб-сервера не совсем идеально, так как оно может пропустить такие вещи, как сериализация. Если бы вы могли развернуть на тестовом сервере и протестировать развернутую копию, вам было бы лучше. Если вы действительно заботитесь о тестировании, WCF - лучший вариант, поскольку вы можете довольно легко самостоятельно размещать WCF в тестах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top