如何将WCF服务添加到现有的winforms应用程序?

时间:2012-08-03 06:32:08

标签: c# wcf service lan

我有一个winform应用程序,可以处理一些数据输入和计费。我想添加一个只能通过本地LAN访问的WCF服务。我希望我的计费程序可以查询我的数据库并为客户端获取一些数据。重要的是,这可以在-same-程序中完成,而不是创建另一个。

我的问题是难以设置这样的WCF服务,我从现有的winform应用程序开始而不是创建新的WCF服务。这是一个简单的问题,即使用正确的使用指令还是从根本上缺少其他东西,因为我没有把它作为WCF服务从一开始就设置好?

另一个问题是我需要担心线程还是由WCF服务自动处理?例如,如果10台计算机同时查询我的winforms应用程序,WCF将无缝地处理,或者我需要实现其他功能来处理这个问题吗?

感谢您阅读

3 个答案:

答案 0 :(得分:7)

基本上,要创建WCF服务,您需要做三件事:

  • 服务合同(通常表示为.NET接口),用于定义服务提供的方法。这还包括方法期望(并可能返回)的数据类型

    [ServiceContract(Namespace="http://services.yourcompany.com/Service/2012/08")]
    interface IMyService
    {
       [OperationContract]
       SomeReturnType ThisIsYourMethod(string input, int value, .....);
    }
    
    [DataContract(Namespace="http://data.yourcompany.com/Service/2012/08")]
    public class SomeReturnType
    {
       [DataMember] 
       public string Name { get; set; }
    
       [DataMember]
       public int Age { get; set; }  
    }
    
  • 服务实现,用于创建要调用的实际服务代码。这只是一个实现服务契约的普通.NET类

    public class MyServiceImplementation : IMyService
    {
         SomeReturnType ThisIsYourMethod(string input, int value, .....)
         {
             /// .... do some processing, fetch data etc.
             return ......
         }
     }
    
  • 服务主机实际托管WCF运行时并启动整个WCF处理;这是一个ServiceHost实例(或派生类),可以托管您的服务。此类需要在Winforms应用程序的启动过程中实例化并打开。一旦服务主机打开,您的服务就可以从外部世界调用。在Winforms应用程序关闭时,您需要确保关闭服务主机。

  • 您可能还需要 - app.config文件中的一些配置设置来定义WCF服务向全世界提供的端点(地址,绑定,合同)。

    < / LI>

所以这非常简单 - 只需在Winform项目中创建这些项目,就完成了。

答案 1 :(得分:4)

请查看这篇文章Hosting and Consuming WCF Services

托管WCF ServiceHost的Windows服务(本文中的示例)

using System;
using System.ServiceModel;
using System.ServiceProcess;
using QuickReturns.StockTrading.ExchangeService;

namespace QuickReturns.StockTrading.ExchangeService.Hosts
{
    public partial class ExchangeWindowsService : ServiceBase
    {
        ServiceHost host;

        public ExchangeWindowsService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Type serviceType = typeof(TradeService);
            host = new ServiceHost(serviceType);
            host.Open();
        }

        protected override void OnStop()
        {
            if(host != null)
               host.Close();
        }
    }
}
  

另一个问题是我需要担心线程还是那个   由WCF服务自动处理?例如,如果10   计算机所有查询我的winforms应用程序同时将WCF   无缝地处理或我需要实现额外的   处理这个的功能?

我认为wcf很容易处理这个负载。但这取决于你想要对它进行的操作。

答案 2 :(得分:1)

对于作为Windows服务和Web服务托管的服务,您的客户还需要一个代理类才能访问公开的合同成员。