在ServiceHost中运行的WCF服务(控制台应用程序)

时间:2012-04-30 16:28:54

标签: c# wcf endpoint servicehost

我正在尝试将先前在任务栏中的.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" />

我想也许我在托管WCF服务的控制台项目中遗漏了某种形式的.config文件,但我可能错了!

2 个答案:

答案 0 :(得分:3)

看起来你正在关闭主机而不等待用户输入。你错过了Console.ReadLine()吗?

答案 1 :(得分:0)

您尚未为ServiceHost实例配置端点。您引用的配置文件未被使用,但根据此文件,您需要配置ServiceHost实例以使用BasicHttpBinding绑定和CheckoutServiceServer.ICheckoutService合同来配置服务端点ServiceHost.AddServiceEndpoint()方法。

有关托管WCF服务的帮助,请参阅this文章。