如何在运行时添加wcf服务

时间:2012-06-03 21:50:28

标签: c# .net wcf visual-studio-2010

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

3 个答案:

答案 0 :(得分:2)

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

结构:

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

实施:

  1. How to: Implement a Discovery Proxy
  2. How to: Implement a Discoverable Service that Registers with the Discovery Proxy
  3. How to: Implement a Client Application that Uses the Discovery Proxy to Find a Service
  4. 拓扑:

    • 启动发现服务[Structure BackBone]
    • 启动服务[每项服务 ANNOUNCE 启动发现服务
    • 启动客户[每个客户发现查找&amp; RESOLVE )服务&#39;发现服务的端点]

    注意:

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

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

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


    您也可以使用WCF Routing Service

    兄弟提示:
    不要为无服务器(No-BackBone,No-BootleNeck,全分布式等等)理想的拓扑结构走得太远,这会让你头晕目眩,让你发疯:D

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

答案 1 :(得分:1)

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

答案 2 :(得分: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

那是你问的吗?