我有一个winform应用程序,可以处理一些数据输入和计费。我想添加一个只能通过本地LAN访问的WCF服务。我希望我的计费程序可以查询我的数据库并为客户端获取一些数据。重要的是,这可以在-same-程序中完成,而不是创建另一个。
我的问题是难以设置这样的WCF服务,我从现有的winform应用程序开始而不是创建新的WCF服务。这是一个简单的问题,即使用正确的使用指令还是从根本上缺少其他东西,因为我没有把它作为WCF服务从一开始就设置好?
另一个问题是我需要担心线程还是由WCF服务自动处理?例如,如果10台计算机同时查询我的winforms应用程序,WCF将无缝地处理,或者我需要实现其他功能来处理这个问题吗?
感谢您阅读
答案 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服务向全世界提供的端点(地址,绑定,合同)。
所以这非常简单 - 只需在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服务托管的服务,您的客户还需要一个代理类才能访问公开的合同成员。