Self-Server Selfhost

  • Tutorial
Wir schreiben "unseren eigenen Server" mit den Namespace-Klassen System.Web.Http.SelfHost.

Konfrontiert mit der Verwendung der Klassen dieses Namespaces, als es notwendig wurde, einen Web-Maulkorb zu schreiben, auf den zugegriffen werden kann über:

BildWindows-Dienst.

Lassen Sie uns zwei Projekte erstellen:
1. Unser
2. Server enthält API-Controller.

Unser Server sieht folgendermaßen aus:

public class HTTPServer
	{
		public static string ServiceAddress = string.Format("http://{0}:{1}", 
                          Common.Config.HTTPServerIP /*собственно прописываем IP*/, 
                          Common.Config.HTTPServerPort /*а здесь прописываем порт*/);
		private HttpSelfHostServer _HTTPserver = null;
		private static HttpSelfHostConfiguration _config = null;
		private static HttpSelfHostServer CreateHost()
		{
			_config = new HttpSelfHostConfiguration(ServiceAddress);
			AssembliesResolver assemblyResolver = new AssembliesResolver();
			_config.Services.Replace(typeof(IAssembliesResolver), assemblyResolver);
			_config.Routes.MapHttpRoute(
			  name: "default",
			  routeTemplate: "api/{controller}/{action}/{id}",
			  defaults: new { controller = "Home", id = RouteParameter.Optional });
			HttpSelfHostServer server = new HttpSelfHostServer(_config);
			server.OpenAsync().Wait();
			return server;
		}
		public void Start()
		{
			_HTTPserver = CreateHost();
		}
		public void Stop()
		{
			if (_HTTPserver != null)
				_HTTPserver.CloseAsync().Wait();
		}
	}


Jetzt muss unser Dienst angeben, woher unsere API-Controller kommen sollen. Dazu erben wir die Klasse im Serverprojekt:

DefaultAssembliesResolver


class AssembliesResolver : DefaultAssembliesResolver
	{
		public override ICollection GetAssemblies()
		{
			ICollection baseAssemblies = base.GetAssemblies();
			List assemblies = new List(baseAssemblies);
			string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Infrastructure.Server.HTTP.Controllers.dll" /*библиотека, получившаяся при компиляции проекта с api контроллерами */);
			assemblies.Add(Assembly.LoadFrom(path));
			return assemblies;
		}
	}


Wir gehen mit Controllern zum zweiten Projekt über. Hier fügen wir eine Klasse hinzu, deren Name die Endung des Controllers enthalten soll, zum Beispiel:

Users Controller
Regions Controller
Devices Controller

Überladen Sie die ApiController-Klasse des System.Web.Http-Namespace und fügen Sie mehrere Methoden hinzu:

public class UsersController : ApiController
	{
		[HttpGet]
		public object hello()
		{
			return "Hello page";
		}
                [HttpPost]
		public object SendData(int data)
		{
			return new HttpResponseMessage(HttpStatusCode.OK);
		}
       }


Lasst uns noch einmal auf die Zeile achten:

"api/{controller}/{action}/{id}"


Diese Linie beschreibt das Routenmuster.
Wir senden die Anforderungen an die in ServiceAddress angegebene IP-Adresse und den angegebenen Port, schreiben dann / api , dann / den Namen unserer Controller-Klasse ohne das Controller- Präfix , zum Beispiel:

Users
Regions
Devices
, und dann / den Methodennamen und die Parameterliste über &

So debuggen Sie die Anwendung Ich verwende die Postman Chrome-Erweiterung - REST Client 0.8.4.10 .

Hier ist ein Beispiel für eine Get-Anfrage:
192.168.1.1 : 8080 / api / Users / Hallo

Hier ist ein Beispiel für eine Post-Anfrage:
192.168.1.1 : 8080 / api / Users / SendData? data = 1

Jetzt auch beliebt: