如何在运行时添加 wcf 服务

本文关键字:wcf 服务 添加 运行时 | 更新日期: 2023-09-27 18:36:06

如何在运行时在我的winform UI中添加wcf服务。我创建了一个wcf服务,它返回托管机器的运行进程。我想在我的 winform 应用程序中添加托管计算机服务。

如何在运行时添加 wcf 服务

您需要在运行时动态更改终结点,因此需要 WCF 发现。

结构:

WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)

实现:

  1. 如何:实现发现代理
  2. 如何:实现向发现代理注册的可发现服务
  3. 如何:实现使用发现代理查找服务的客户端应用程序

拓扑学:

  • 启动发现服务 [ 结构主干 ]
  • 启动服务 [每个服务
  • 都将向发现服务宣布其启动]
  • 启动客户端 [每个客户端都将从发现服务发现(查找解析)服务的端点]

笔记:

  • 发现过程使用UDP(检查你的防火墙,它可以阻止连接)
  • 服务
  • 必须宣布其启动,因此自托管服务是可以的,但 IIS 托管的 5/6 服务不是因为它们在第一次调用发生时自动启动!

解决 IIS 托管的 5/6 问题:

  • 通过使用ServiceHostFactory扩展托管

以便您可以手动启动 IIS 承载的 5/6 服务,而无需首次调用


还可以使用 WCF 路由服务。

兄弟提示 :
不要为无服务器(无骨干,无靴颈,完全分布式等)理想的拓扑走得太远,这会让你大吃一惊,让你发疯:D

对于初学者,我建议您使用本教程 [ WCF 教程 ]

不确定你在这里想做什么。但是,要调用 WCF 服务,您需要知道两件事:1) 服务协定 2) 终结点。现在无法从服务协定中转义,因为您需要知道可以使用的所有操作。但是,在 WCF 4 中,有一项称为 WCF 发现的新功能,可帮助您动态确定端点,即在运行时。请参阅以下链接 http://msdn.microsoft.com/en-us/library/dd456791.aspx

如果我理解您的问题正确,则需要一些代码来在运行时添加服务,而无需在 *.config 文件和 *.svc 文件中使用任何配置。

请参阅该示例:

    Uri baseAddress = new Uri("http://localhost:8080/hello");
    // Create the ServiceHost.
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
    {
        // Enable metadata publishing.
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    smb.HttpGetEnabled = true;
    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    host.Description.Behaviors.Add(smb);
    // Open the ServiceHost to start listening for messages. Since
    // no endpoints are explicitly configured, the runtime will create
    // one endpoint per base address for each service contract implemented
    // by the service.
    host.Open();
    Console.WriteLine("The service is ready at {0}", baseAddress);
    Console.WriteLine("Press <Enter> to stop the service.");
    Console.ReadLine();
    // Close the ServiceHost.
    host.Close();
}

它在控制台应用中创建自承载服务。

http://msdn.microsoft.com/en-us/library/ms731758.aspx

这是你问的吗?