1

C#からローカルで信号を発信しようとしています。目標は、localhost / serv?stream=SOME_STREAMにリクエストを送信することです。サーバーからの応答を取得する必要はありません。必要なのは、サーバーが要求を受信することだけです。現在、次のコードを使用していますが、これらのオブジェクトの使用についてはあまり気にしません。どのソリューションでも問題ありません。

    private void updateStreams(string streamname)
    {
        WebRequest myWebRequest = WebRequest.Create(new Uri("http://localhost/serv?stream=" + streamname));
        WebResponse myWebResponse = myWebRequest.GetResponse();
        myWebResponse.Close();
    }

デバッグを試しましたが、ブロッキング呼び出しはmyWebRequest.GetResponse()のようですが、この行がないと要求が行われないため、この行は重要です。同じポイントでブロックする次のコードも試しました。

        var myWebRequest = (System.Net.HttpWebRequest)WebRequest.Create(new Uri("http://localhost/serv?stream=" + sesh.session_name));
        using (var myWebResponse = (System.Net.HttpWebResponse)myWebRequest.GetResponse())
        {
            var responseStream = myWebResponse.GetResponseStream();
            responseStream.ReadTimeout = 2; 
            responseStream.Close();
            responseStream.Dispose();
            myWebResponse.Close();
        }
4

2 に答える 2

1

あなたはそのように使うことができますWebClient.DownloadStringAsync()

WebClient wc = new WebClient();
wc.DownloadStringCompleted += new  DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("http://localhost/serv?stream=" + streamname));

wc_DownloadStringCompletedこれにより、メインスレッドをブロックせずにリクエストが終了すると、リクエストが実行され、メソッドが呼び出されます。

于 2012-09-04T23:52:29.650 に答える
1

コードをブロックせずに.Net4.5を使用している場合は以前のバージョンのフレームワークでWebRequest.GetResponseAsync()またはWebRequest.BeginGetResponse()を試してください。

于 2012-09-04T23:59:25.267 に答える