Http Listener против Web Api для вставки в SqlServer - PullRequest
0 голосов
/ 05 октября 2018

Я использую очень простое программное обеспечение.Мне нужно только отправить с мобильного телефона запрос на локальный компьютер (через wifi), а затем приложение для выполнения моего запроса.

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

Метод One Http Listener:

HttpListener listener;
Thread t;

private void Form1_Load(object sender, EventArgs e)
{

        t = new Thread(new ThreadStart(MyThreadMethod));
        t.IsBackground = true;
        listener = new HttpListener();
        listener.Prefixes.Add("http://192.168.0.214:8282/");
        listener.Start();
        t.Start();

}
void MyThreadMethod()
{
    while (true)
    {
         IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
            result.AsyncWaitHandle.WaitOne(30000);
    }
}

public void ListenerCallback(IAsyncResult result)
{

        string Response = "";
        try
        {


            HttpListener listener = (HttpListener)result.AsyncState;
            HttpListenerContext context = listener.EndGetContext(result);
            var SqlData = new StreamReader(context.Request.InputStream,context.Request.ContentEncoding).ReadToEnd();

            string connectionString = "Server=(local);Database=xxxx;User id=admin;password=1234;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                using (SqlCommand ReceiveData = new SqlCommand(SqlData, connection))
                    ReceiveData.ExecuteNonQuery();
                Response = "OK";

            }
            HttpListenerResponse response = context.Response;
            string responseString = Convert.ToString(Response);
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            output.Close();
  }
  catch (Exception ex)
  {

      using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\LogFile.txt"))
      {
          file.WriteLine(Convert.ToString(ex));
      }

Этот метод работает на моем локальном компьютере как * .exe или cmd или как windowsservice.

Метод 2 Asp Net Web Api: (я создаю контроллер с именем InsertData)

  public class InsertDataController : ApiController
  {

    // POST: api/InsertData
    public string Post(HttpContent httpContent)
    {
        var readAsStringAsync = httpContent.ReadAsStringAsync();
        var SqlData = readAsStringAsync.Result;

        string connectionString = "Server=(local);Database=xxxx;User id=admin;password=1234;";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlCommand ReceiveData = new SqlCommand(SqlData, connection))
                ReceiveData.ExecuteNonQuery();

        }
        return "OK";
    }

Я заметил, что asp net на несколько миллисекунд медленнее, чем прослушиватель http.Но это кажется более стабильным с более коротким кодом.Также asp net работает через IIS7 и httplistener как * .exe или cmd или служба Windows.Но какой из методов более стабилен и стоит лучше в моем случае?Мне не нужно что-то большее, чем отправка простых строк.

...