以前にタスクバーの .asmx サービスで実行されていた WCF サービスをコンソール アプリにラップしようとしています。
WCF サービスをラップするコードは次のとおりです。
class Program
{
static void Main(string[] args)
{
Uri uri = new Uri("http://localhost:5000");
using (ServiceHost host = new ServiceHost(typeof(CheckoutService), uri))
{
Console.WriteLine("Prepping CheckoutService server");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Open();
Console.Clear();
Console.WriteLine("CheckoutService server up and running");
Console.WriteLine("Press Return to stop service at any point");
Console.ReadLine();
host.Close();
}
}
ただし、このサービスを受信する必要があるクライアント アプリケーション (サービスがコンソール アプリにラップされる前に動作していた) は、次のエラーでクラッシュします。
メッセージを受け入れることができるhttp://localhost:5000/CheckoutService.svcでリッスンしているエンドポイントはありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、InnerException (存在する場合) を参照してください。
app.config でのこのクライアントのエンドポイント構成は次のとおりです。
<endpoint
address="http://localhost:5000/CheckoutService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICheckoutService"
contract="CheckoutServiceServer.ICheckoutService" name="BasicHttpBinding_ICheckoutService" />
.config
おそらく、WCF サービスをホストしているコンソール プロジェクトで何らかの形式のファイルが不足していると思いますが、間違っている可能性があります。