私のソリューションには4つのプロジェクトがあります。GetDetfromDB
、と呼ばれる 2 つの WCF サービス ライブラリ プロジェクトModifyDBService
。これらの WCF サービス ライブラリを参照する 1 つのコンソール アプリケーションと、この WCF サービスを呼び出す Windows アプリケーション。
Windows アプリでコンソール アプリのリファレンスを作成しました。これで、ウィンドウ アプリからクライアント アプリを呼び出すことができます。
しかし、Windowsアプリから呼び出すことで、コンソールアプリで参照されているサービスを呼び出すにはどうすればよいですか?
注: F5 キーまたはデバッガーを押すと、[新しいインスタンスを開始] の両方のサービスがコンソールから正しく実行されます。すべてのバインディング、エンドポイント アドレスを正しく構成しました。プログラムで呼び出す方法が必要です。
これが私のコンソールアプリケーションコードです:
namespace ServiceHostConsole
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("enter to start");
Console.Read();
Type serviceType = typeof(GetDetfromDB.ImpService);
Type serviceModifyDB = typeof(ModifyDBService.Manipulate);
ServiceHost host1 = new ServiceHost(serviceModifyDB);
host1.Open();
using (ServiceHost host = new ServiceHost(serviceType))
{
host.Open();
Console.WriteLine("The Product Service is available");
Console.ReadLine(); host.Close();
}
Console.WriteLine("Please enter to close modify service");
Console.Read();
host1.Close();
}
public string returnPath()
{
string folder = Environment.CurrentDirectory;
return folder;
}
}
}
Windowsアプリケーションから私はこのように呼び出しています....
public Form1()
{
InitializeComponent();
ServiceHostConsole.Program pb = new ServiceHostConsole.Program();
Process.Start(pb.returnPath()+ @"\ServiceHostConsole.exe");
}
プログラムがサービスを開こうとすると、次のエラーが表示されます..
サービス 'ModifyDBService.Manipulate' にはアプリケーション (非インフラストラクチャ) エンドポイントがありません。これは、アプリケーションの構成ファイルが見つからなかったか、サービス名に一致するサービス要素が構成ファイルに見つからなかったか、サービス要素にエンドポイントが定義されていなかったためである可能性があります。
メソッドのみをやみくもに呼び出しており、サービスを呼び出していないのではないかと疑っています。
この問題から抜け出すために親切に助けてください。私はこのために過去 5 日間苦労してきました。
Windows アプリケーションを公開する必要があります。[セットアップ] をクリックすると、Windows アプリケーションと呼び出されたサービスを含むクライアント アプリケーションの両方が開きます。これが私の要件です。
私の ServiceHostConsole の App.config は次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="GetDetfromDB.ImpService">
<endpoint address="http://localhost:8080/MyService" binding="basicHttpBinding"
bindingConfiguration="" contract="GetDetfromDB.IGetExpenseValuestype" />
</service>
<service name="ModifyDBService.Manipulate">
<endpoint address="http://localhost:8081/MyService1." binding="basicHttpBinding"
bindingConfiguration="" contract="ModifyDBService.IManipulateDB" />
</service>
</services>
</system.serviceModel>
</configuration>