0

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

4

3 回答 3

2

您需要在运行时动态更改端点,因此您需要WCF Discovery

结构 :

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

执行 :

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

拓扑:

  • 启动发现服务 [ 结构 BackBone ]
  • 启动服务 [每个服务都将向发现服务宣布其启动]
  • 启动客户端 [每个客户端都会从发现服务中发现查找解决)服务的端点]

备注:

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

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

这样您就可以手动启动 IIS-Hosted 5/6 服务而无需第一次调用


您还可以使用WCF 路由服务

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

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

于 2012-06-04T00:55:21.253 回答
1

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

于 2012-06-03T22:26:57.857 回答
0

如果我正确理解您的问题,您需要一些代码来在运行时添加服务,而无需使用 *.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

那是你问的吗?

于 2012-06-04T01:17:48.610 回答