using System.IO; using System.Linq; using System.Net; using System.Xml.Linq; using NUnit.Framework; using Sakila.ServiceModel.Version100.Operations.SakilaService; using ServiceStack.ServiceModel.Extensions; using ServiceStack.ServiceModel.Serialization; using ServiceStack.UsageExamples.Support; namespace ServiceStack.UsageExamples { [TestFixture] public class UsingRawHttpClient : TestBase { [Test] public void Get_customers_using_soap12_http_post() { var soapRequest = @" http://services.servicestack.net/GetCustomers {0} {1} 100 "; var request = string.Format(soapRequest, WsSyncReplyUri, CustomerId); var client = (HttpWebRequest)WebRequest.Create(base.WsSyncReplyUri); client.ContentType = "application/soap+xml; charset=utf-8"; client.Accept = "text/xml"; client.Method = "POST"; using (var stream = client.GetRequestStream()) { using (var writer = new StreamWriter(stream)) { writer.Write(request); } } var soapResponse = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); var el = XElement.Parse(soapResponse); var customers = el.AnyElement("Body").AnyElement("GetCustomersResponse") .AnyElement("Customers").AllElements("Customer").ToList(); Assert.AreEqual(1, customers.Count); Assert.AreEqual(CustomerId, customers[0].GetInt("Id")); } [Test] public void Get_customers_using_soap11_http_post() { var soapRequest = @" {0} 100 "; var request = string.Format(soapRequest, CustomerId); var client = (HttpWebRequest)WebRequest.Create(base.BasicHttpSyncReplyUri); client.ContentType = "text/xml; charset=utf-8"; client.Headers.Add("SOAPAction", "GetCustomers"); client.Accept = "text/xml"; client.Method = "POST"; using (var stream = client.GetRequestStream()) { using (var writer = new StreamWriter(stream)) { writer.Write(request); } } var soapResponse = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); var el = XElement.Parse(soapResponse); var customers = el.AnyElement("Body").AnyElement("GetCustomersResponse") .AnyElement("Customers").AllElements("Customer").ToList(); Assert.AreEqual(1, customers.Count); Assert.AreEqual(CustomerId, customers[0].GetInt("Id")); } [Test] public void Get_customers_using_xml_http_post() { var xmlRequest = string.Format( @" {0} 100 ", CustomerId); var requestUri = base.XmlSyncReplyBaseUri + "/GetCustomers"; var client = WebRequest.Create(requestUri); client.Method = "POST"; client.ContentType = "application/xml"; using (var writer = new StreamWriter(client.GetRequestStream())) { writer.Write(xmlRequest); } var xmlResponse = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); var el = XElement.Parse(xmlResponse); var customers = el.AnyElement("Customers").AllElements("Customer").ToList(); Assert.AreEqual(1, customers.Count); Assert.AreEqual(CustomerId, customers[0].GetInt("Id")); } [Test] public void Get_customers_using_json_http_post() { var jsonRequest = string.Format(@"{{""CustomerIds"":[{0}],""Version"":0}}", CustomerId); var requestUri = base.JsonSyncReplyBaseUri + "/GetCustomers"; var client = WebRequest.Create(requestUri); client.Method = "POST"; client.ContentType = "application/json"; using (var writer = new StreamWriter(client.GetRequestStream())) { writer.Write(jsonRequest); } var jsonResponse = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); var response = JsonDataContractDeserializer.Instance.Parse(jsonResponse, typeof(GetCustomersResponse)) as GetCustomersResponse; Assert.IsNotNull(response); Assert.AreEqual(1, response.Customers.Count); Assert.AreEqual(CustomerId, response.Customers[0].Id); } } }