在服务主机(控制台应用)中运行的 WCF 服务
本文关键字:服务 运行 WCF 应用 主机 控制台 | 更新日期: 2023-09-27 18:32:39
我正在尝试将以前在任务栏中的 .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
文件,但我可能是错的!
看起来您正在关闭主机而不等待用户输入。你错过Console.ReadLine()
吗?
您尚未为 ServiceHost
实例配置终端节点。未使用引用的配置文件,但基于此文件,需要将ServiceHost
实例配置为使用 BasicHttpBinding 绑定和 CheckoutServiceServer.ICheckoutService
协定,通过 ServiceHost.AddServiceEndpoint()
方法配置服务终结点。
有关承载 WCF 服务的帮助,请参阅此文章。