C# 如何在运行时添加wcf服务

C# 如何在运行时添加wcf服务,c#,.net,wcf,visual-studio-2010,C#,.net,Wcf,Visual Studio 2010,如何在运行时在winform UI中添加wcf服务。 我创建了一个wcf服务,它返回托管机器的运行进程。我想在我的winform应用程序中添加托管计算机服务。不确定您在这里要做什么。但要调用WCF服务,您需要知道两件事1)服务合同2)终点。现在,无法逃避服务契约,因为您需要知道可以使用哪些操作。但是,对于WCF 4,有一个称为WCF发现的新功能,可以帮助您在运行时动态确定端点。请参阅以下链接不确定您要在此处执行的操作。但要调用WCF服务,您需要知道两件事1)服务合同2)终点。现在,无法逃避服务契

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

不确定您在这里要做什么。但要调用WCF服务,您需要知道两件事1)服务合同2)终点。现在,无法逃避服务契约,因为您需要知道可以使用哪些操作。但是,对于WCF 4,有一个称为WCF发现的新功能,可以帮助您在运行时动态确定端点。请参阅以下链接

不确定您要在此处执行的操作。但要调用WCF服务,您需要知道两件事1)服务合同2)终点。现在,无法逃避服务契约,因为您需要知道可以使用哪些操作。但是,对于WCF 4,有一个称为WCF发现的新功能,可以帮助您在运行时动态确定端点。请参阅以下链接,您需要在运行时动态更改端点,因此需要

结构:

WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)
WCF消费者WCF发现服务WCF服务
实施:

  • 拓扑:

    WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)
    
    • 启动发现服务[结构主干]
    • 启动服务[每个服务将向发现服务宣布其启动]
    • 启动客户端[每个客户端将从发现服务中发现查找&解析)服务的终结点]
    注意事项:

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

    这样您就可以手动启动IIS托管的5/6服务,而无需第一次调用


    您也可以使用

    兄弟提示:
    不要过分追求无服务器(无主干、无BootleNeck、完全分布式等)的理想拓扑,这会让你大吃一惊,让你发疯:D


    对于初学者,我建议您学习本教程[]

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

    结构:

    WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)
    
    WCF消费者WCF发现服务WCF服务
    
    实施:

  • 拓扑:

    WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)
    
    • 启动发现服务[结构主干]
    • 启动服务[每个服务将向发现服务宣布其启动]
    • 启动客户端[每个客户端将从发现服务中发现查找&解析)服务的终结点]
    注意事项:

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

    这样您就可以手动启动IIS托管的5/6服务,而无需第一次调用


    您也可以使用

    兄弟提示:
    不要过分追求无服务器(无主干、无BootleNeck、完全分布式等)的理想拓扑,这会让你大吃一惊,让你发疯:D


    对于初学者,我建议您学习本教程[]

    如果我正确理解您的问题,您需要一些代码来在运行时添加服务,而无需使用*.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();
    }
    
    uribaseaddress=新的Uri(“http://localhost:8080/hello");
    //创建ServiceHost。
    使用(ServiceHost主机=新ServiceHost(typeof(HelloWorldService),baseAddress))
    {
    //启用元数据发布。
    ServiceMetadataBehavior smb=新ServiceMetadataBehavior();
    smb.HttpGetEnabled=true;
    smb.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
    host.Description.Behaviors.Add(smb);
    //打开ServiceHost以开始侦听消息。自
    //没有显式配置端点,运行时将创建
    //实现的每个服务契约的每个基址一个端点
    //通过服务。
    host.Open();
    WriteLine(“服务在{0}处准备就绪”,基地址);
    控制台。WriteLine(“按以停止服务”);
    Console.ReadLine();
    //关闭ServiceHost。
    host.Close();
    }
    
    它在控制台应用程序中创建自托管服务


    这是你问的吗

    如果我正确理解您的问题,您需要一些代码来在运行时添加服务,而不使用*.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();
    }
    
    uribaseaddress=新的Uri(“http://localhost:8080/hello");
    //创建ServiceHost。
    使用(ServiceHost主机=新ServiceHost(typeof(HelloWorldService),baseAddress))
    {
    //启用元数据发布。
    ServiceMetadataBehavior smb=新ServiceMetadataBehavior();
    smb.HttpGetEnabled=true;
    smb.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
    host.Description.Behaviors.Add(smb);
    //打开ServiceHost以开始侦听消息。自
    //没有显式配置端点,运行时将创建
    //实现的每个服务契约的每个基址一个端点
    //通过服务。
    host.Open();
    控制台。WriteLin