Намагаюся розібратися в HTTP, SOAP, RESTful протоколах...
Потрібно написати кросплатформену програму для Androin, ios i Window для цього я вибрав Xamarin тому що "Apps built using Xamarin look and feel native, because they are Native User Interfaces, Native API Access, Native Performance"
В цій програмі буде можливість для клієнта
- реєструватися (підтримка облікових записів),
- збереження інформації що буде прив'язана до облікового запису
Адміністратора
- управління обліковими записами клієнтів
- доступ до прив'язаної інформації клієнтів
Я не можу додати модуль з доступом до БД в клієнтську програму та програму адміністраторів тому що це не безпечно, в такому випадку в цих програмах буде захардкоджений логін і пароль до БД.
Значить потрібно створити веб програму яка буде мати модуль з доступом до БД, а клієнтські і програми адміністраторів будуть робити запити до цієї веб програми.
Тепер питання: Якщо буде створено Web Application -> Empty -> WebService? То з яким протоколом буде працювати цей веб сервіс ? Протоколи HTTP i SOAP, RESTful це різні шари(layers) мережевого-протоколу ?
▼Приклад
Програма яка робить запит до веб сервісу
namespace web2
{
class Program
{
static void Main(string[] args)
{
//creating object of program class to access methods
Program obj = new Program();
//Calling InvokeService method
obj.InvokeService();
}
public void InvokeService()
{
//Calling CreateSOAPWebRequest method
HttpWebRequest request = CreateSOAPWebRequest();
XmlDocument SOAPReqBody = new XmlDocument();
//SOAP Body Request
SOAPReqBody.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>" +
@"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" +
@"<soap:Header>" +
@"<AuthHeader xmlns=""http://tempuri.org/"">" +
@"<Username>Username1</Username>" +
@"<Password>Password1</Password>" +
@"</AuthHeader>" +
@" </soap:Header>" +
@"<soap:Body>" +
@"<HelloWorld xmlns=""http://tempuri.org/""/>" +
@"</soap:Body>" +
@"</soap:Envelope>");
using (Stream stream = request.GetRequestStream())
{
SOAPReqBody.Save(stream);
}
//Geting response from request
using (WebResponse Serviceres = request.GetResponse())
{
using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
{
//reading stream
var ServiceResult = rd.ReadToEnd();
//writting stream result on console
Console.WriteLine(ServiceResult);
Console.ReadLine();
}
}
}
public HttpWebRequest CreateSOAPWebRequest()
{
//Making Web Request
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(@"http://localhost:61711/WebServiceTCW.asmx");
//SOAPAction
Req.Headers.Add(@"SOAPAction:http://tempuri.org/HelloWorld");
//Content_type
Req.ContentType = "text/xml;charset=\"utf-8\"";
Req.Accept = "text/xml";
//HTTP method
Req.Method = "POST";
//return HttpWebRequest
return Req;
}
}
}
Веб серівс
namespace WA_TCW
{
public class AuthHeader : SoapHeader
{
public string Username;
public string Password;
}
/// <summary>
/// Summary description for WebServiceTCW
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebServiceTCW : System.Web.Services.WebService
{
public AuthHeader Authentication;
[WebMethod, SoapHeader("Authentication")]
public string HelloWorld()
{
return "Hello World " +
Authentication.Username +
" " +
Authentication.Password;
}
}
}
Я відправляю HTTP запит чому він приходить як SOAP запит ? Я можу так само з HTTP отримати RESTful ?
Раніше була можливість у Visual Stuido така як Add Web Reference, зараз (у 2019 версії) якщо натиснути Add Reference відкривається сторінка з можливістю OpenAPI i gRPC. Як додати Web Reference ? - Я переплутав net framework i core
І так, я гуглив/читав про HTTP, SOAP, RESTful але поки що не розумію як це працює