Я использую очень простое программное обеспечение.Мне нужно только отправить с мобильного телефона запрос на локальный компьютер (через 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.Но какой из методов более стабилен и стоит лучше в моем случае?Мне не нужно что-то большее, чем отправка простых строк.