Тестирование пользовательских SOAP-заголовков в ASMX - PullRequest
2 голосов
/ 17 октября 2008

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

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

Ответы [ 4 ]

2 голосов
/ 26 ноября 2008

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

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

1 голос
/ 22 июля 2009

Вы спросили

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

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

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

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

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

1 голос
/ 10 ноября 2008

Если я понимаю, что вы пытаетесь сделать, вы можете просто сделать 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);
0 голосов
/ 21 октября 2008

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

string customer = MyContext.Current.Customer;

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

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

...