私は C# WCF プロジェクトに取り組んでおり、非常に大きな、できれば単純な問題を除いて、ほとんど機能しています。
WCF サービスはコンソール アプリケーション内からホストされ、コンソール アプリケーションは別のクラスに対して関数を呼び出して、WCF サービスの接続を開きます。
ただし、関数の最後の行が host.open(); の場合。その後、関数呼び出しが終了して接続が閉じられ、サービスを使用できなくなります。ただし、Console.ReadLine() を host.open の後に配置すると、サービスは開いたままになり、使用できますが、明らかにプログラムの残りのフローは実行されなくなります。
以下は、ホスト接続を開くために使用しているコードです。
public void startSoapServer()
{
string methodInfo = classDetails + MethodInfo.GetCurrentMethod().Name;
if (String.IsNullOrEmpty(Configuration.soapServerSettings.soapServerUrl) ||
Configuration.soapServerSettings.soapPort == 0)
{
string message = "Not starting Soap Server: URL or Port number is not set in config file";
library.logging(methodInfo, message);
library.setAlarm(message, CommonTasks.AlarmStatus.Medium, methodInfo);
return;
}
//baseAddress = new Uri(string.Format("{0}:{1}", Configuration.soapServerSettings.soapServerUrl,
// Configuration.soapServerSettings.soapPort));
baseAddress = new Uri("http://localhost:6525/hello");
using (ServiceHost host = new ServiceHost(typeof(SoapServer), baseAddress))
{
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Opened += new EventHandler(host_Opened);
host.Faulted += new EventHandler(host_Faulted);
host.Open();
Console.ReadLine();
}
Console.ReadLine() がないと、関数が終了して接続が閉じます。C# アプリが実行されている間、ホストを開いたままにしておくにはどうすればよいですか。
この関数呼び出しは、コンソール内のいくつかのものを初期化する途中で Main メソッド内から呼び出されます。
ご協力いただきありがとうございます。