SLACK チャット クライアントの API と通信する C# コンソール アプリケーションがあります。問題なく SLACK にデータを投稿できます。今、私は逆のことをしたいと思います。
SLACK では、POST 先の URL を指定できます。URL を指定し、POST を受信するように C# プロジェクトを構成したいと考えています。ヘルプ!?
HttpListenerを使用できます。
Harold Hunt の記事に基づく簡単な例
public delegate byte[] ProcessDataDelegate(string data);
public class SimpleServer
{
private const int HandlerThread = 2;
private readonly ProcessDataDelegate handler;
private readonly HttpListener listener;
public SimpleServer(HttpListener listener, string url, ProcessDataDelegate handler)
{
this.listener = listener;
this.handler = handler;
listener.Prefixes.Add(url);
}
public void Start()
{
if (listener.IsListening)
return;
listener.Start();
for (int i = 0; i < HandlerThread; i++)
{
listener.GetContextAsync().ContinueWith(ProcessRequestHandler);
}
}
public void Stop()
{
if(listener.IsListening)
listener.Stop();
}
private void ProcessRequestHandler(Task<HttpListenerContext> result)
{
var context = result.Result;
if (!listener.IsListening)
return;
// Start new listener which replace this
listener.GetContextAsync().ContinueWith(ProcessRequestHandler);
// Read request
string request = new StreamReader(context.Request.InputStream).ReadToEnd();
// Prepare response
var responseBytes = handler.Invoke(request);
context.Response.ContentLength64 = responseBytes.Length;
var output = context.Response.OutputStream;
output.WriteAsync(responseBytes, 0, responseBytes.Length);
output.Close();
}
}
その後、コンソール アプリから http サーバーを単純化できます。
static void Main(string[] args)
{
StartServer();
Console.ReadKey();
}
public static void StartServer()
{
var httpListener = new HttpListener();
var simpleServer = new SimpleServer(httpListener, "http://127.0.0.1:1234/test/", ProcessYourResponse);
simpleServer.Start();
}
public static byte[] ProcessYourResponse(string test)
{
Console.WriteLine(test);
return new byte[0]; // TODO when you want return some response
}
GET は、サーバーからデータを取得するための HTTP メソッドです。異なるデータ ソースを指すには、異なる URI に対して要求を行う必要があります。たとえば、検索クエリを指定して会話からメッセージを取得する場合はhttps://slack.com/api/search.messages
、必要なパラメーターを渡すために GET HTTP 要求を行う必要があります。
C# で Web サービスを作成する方法はたくさんあります。WCF、WebAPI、ASMX、低レベルのソケット、およびあらゆる種類のオープン ソース フレームワークも同様です。
コンソール アプリには収まりませんが、私の意見では、これらの中で最も簡単なのは、ASP.NET Web アプリケーションである WebAPI です。
コンソール アプリを使用する必要がある場合は、Katana を検討します。