0

1 つまたは複数のアプリに関する顧客からのフィードバックを探しています (オプションであり、通知されます)。そのため、オフラインの C# Winforms アプリからオンライン ログ ファイルに追加するテキストを送信したいと考えています。

それが違いを生む場合、サーバーはLinuxベースであり、一般の人もアクセスできるかどうかは気にしないので、暗号化などについて心配する必要はありません(個人情報などはサーバーに保存されません).

そのようなことを行うために必要な C# コードは何でしょうか? (Web サイトのふりをします: http://www.website.com/logfile.txt )。ファイルを大量に読み取り、大量に書き戻す必要がありますか、それともより効率的な「追加」操作を使用できますか?

編集: 想像以上に難しそうです。このタスクを支援するために単純な PHP スクリプトを作成する必要がある場合は、それで構いませんが、その場合のコードも同様に高く評価されます。

4

3 に答える 3

2

いくつかのオプションがあります。

まず、オンライン ログ ファイルであるlogglyのようなサービスをチェックアウトできます。アプリケーションからデータを送信するための個人用 API キーがあります。

それをしたくない場合は、文字列パラメーターを持つ単純な Post を持つ独自の API を作成できます。次に、ファイルを開き、テキストを追加して保存します。Winform は、API がそれを処理できることを知っていれば、起動して忘れることができます。

C# では、RestSharp または HttpClient を使用してデータを API に送信できます。

あなたが遭遇する問題は、Winform アプリにファイルを保存させることだと思います。ローカル ファイルの場合は、(シン全体をメモリに読み込まずに) ファイルに追加するだけで済みます。ただし、リモート マシンでは、最初にファイル全体をダウンロードする必要があります。次の問題は、Winform アプリがファイルを保存できるようにすることです。API 呼び出しのようなものがないと、多くの問題が発生する可能性があります。

于 2013-02-24T18:23:06.267 に答える
1

これはニーズに対して十分に堅牢ではないかもしれませんが、これが私の解決策です。これを行う最も簡単な方法は、C# アプリケーションでテキストを Web スクリプトに送信することです。データが暗号化されているかどうかは気にしないと言ったので、テキストを get パラメーターとして PHP スクリプトに渡さない理由を考えました。この例は非常に単純です。必要に応じて他のチェックを追加することもできます。

C# コードは次のようになります。

 string loggerUrl = "http://www.YourDomainExample.com/Logger.php?text=";
 string textToLog = WebUtility.UrlEncode("This text came from my C# desktop application");
 HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(loggerUrl + textToLog);
 HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
 myWebResponse.Close();

Web サーバーに常駐する PHP スクリプトは次のようになります。

<?php

$text = htmlspecialchars($_GET["text"]);

$log = "log.txt";
$fh = fopen($log, 'a') or die("can't open file"); // Open log in append mode
$textToWrite = "$text\n"; //Write each comment on a line
fwrite($fh, $textToWrite);
fclose($fh);

?>

このようにすることで、基本的に、URL を呼び出すことができるものはすべてログにテキストを追加できます。そのため、ロガーはデスクトップ アプリケーションの一部である可能性があり、携帯電話や Web アプリケーションなどで実行されます。

PHP スクリプトが正しく動作していることをテストするには、Web ブラウザーをクライアントとして使用し、Web ブラウザーからhttp://www.YourDomainExample.com/Logger.php?text=Testにアクセスして、log.txt を確認します。ウェブサーバー

于 2013-02-24T22:33:40.570 に答える
0

リモートの宛先にログインする場合、2 つの解決策があります。どちらもlog4netを使用しています:

解決策 1:

log4netデータベースにログインするように設定できます。構成については、こちらを参照してください。

解決策 2:

ログクラスを派生させてAppenderSkeleton、必要なものにログインするように動作を構成できます。

internal class MyAppender : AppenderSkeleton
{
    /// <summary>
    /// Subclasses of <see cref="T:log4net.Appender.AppenderSkeleton"/> should implement this method
    /// to perform actual logging.
    /// </summary>
    /// <param name="loggingEvent">The event to append.</param>
    protected override void Append(LoggingEvent loggingEvent)
    {
        /* Here you can do whatever you want with your loggingEvent */
    }
}
于 2013-02-24T18:54:54.093 に答える