我正在尝试将先前在任务栏中的.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
文件,但我可能错了!
答案 0 :(得分:3)
看起来你正在关闭主机而不等待用户输入。你错过了Console.ReadLine()
吗?
答案 1 :(得分:0)
您尚未为ServiceHost
实例配置端点。您引用的配置文件未被使用,但根据此文件,您需要配置ServiceHost
实例以使用BasicHttpBinding绑定和CheckoutServiceServer.ICheckoutService
合同来配置服务端点ServiceHost.AddServiceEndpoint()
方法。
有关托管WCF服务的帮助,请参阅this文章。