WCFサービスがあります。それをコンソールアプリケーションに変換したいと思います。基本的にはシンプルなサービスです。PowerShellリクエストによるクライアントリクエストに応じて、2つのジョブのみを実行します。
Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient1"
または
Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient2"
私のサービスは、この2つのリクエストをリクエストに応じてリッスンします。
私はこのWCFコードを持っています:
myService service = new myService(_settings);
backupServiceHost = new WebServiceHost(service, _backupAddress);
WebHttpBinding binding = new WebHttpBinding();
string address = "";
ServiceEndpoint endpoint = backupServiceHost .AddServiceEndpoint(typeof(ISnapshotServiceContract), binding, address);
backupServiceHost .Open();
コンソールアプリでWebServiceHost
とWebHttpBinding
を使用できません。これの最良の代替品は何ですか?シンプルなものを使うことを考えていますHttpClient
。しかし、それが正しい選択かどうかはわかりませんか?
コマンドラインパラメータを使用せず、WebServiceHost
完全に回避するのはなぜですか?次に、args[]
from Main関数(https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/を参照)を比較して、それがBackupClient1
コマンドであるか、それともコマンドであるかを判断できます。BackupClient2
コマンド。
この概念をさらに発展させたい場合は、BackupClient1
コマンドとBackupClient2
コマンドの機能を別々のライブラリに抽出し、同じバックエンドを使用するフロントエンド(WCFとコマンドライン)を使用できます。
(以下のコメントで述べられているように)本当にWCFサービスが必要な場合は、このMSDNの記事を参照してください。構成を提供し、プロセスを適切に終了することを示す方法を理解する必要がありますが、要約すると次のようになります。
String baseAddress = "http://localhost:10000/backup";
BasicHttpBinding binding = new BasicHttpBinding();
using (ServiceHost host = new ServiceHost(typeof(myService)))
{
host.AddServiceEndpoint(typeof(IMyService), binding, baseAddress);
host.Open();
while(true) {
// Figure out how to exit this loop - e.g. listen to some command from service
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加