WCF简单示例

1、服务契约
using System.ServiceModel;

namespace Contracts
{
[ServiceContract(Name = "GatherService", Namespace = "http://www.yostec.com/")]
public interface IGather
{
[OperationContract]
int Add(string DANo, DateTime DATime, DateTime LogTime, string MeterNo, string MeterType, double Qty, string password, string regionno);
}
}
服务契约一般是以“接口”的形式定义,这样可以确保不同的契约可以被服务方法组合实现。另外,定义契约要采用“ServiceContract”标记,需引用命名空间“System.ServiceModel”。


2、服务方法
namespace Services
{
public class GatherService:IGather
{
public int Add(string DANo, DateTime DATime, DateTime LogTime, string MeterNo, string MeterType, double Qty, string Password, string RegionNo)
{
int flag = 0;
if (Password == "123456")
{
CollectDatas collectdatas = new CollectDatas();
collectdatas.DANo = DANo;
collectdatas.DATime = DATime;
collectdatas.LogTime = LogTime;
collectdatas.MeterNo = MeterNo;
collectdatas.MeterType = MeterType;
collectdatas.Qty = Qty;
collectdatas.RegionNo = RegionNo;

CollectDatasService collectdatasservice = new CollectDatasService();

try
{
collectdatasservice.AddCollectDatas(collectdatas);
flag = 1;
}

catch(Exception)
{
flag = 0;
}



}
else
{
flag = 2;
}

return flag;
}
}
}
服务方法是对契约中定义的内容的实现,一般包含数据交互,所以需要调用数据访问层。


3、服务方法宿主“ServiceHost”
public static int HostGatherService()
{
//打开数据库连接
Common.Common.GatherServiceConn = new Common.DataAccessManual();

int flag = 0;
ServiceHost calculatorSerivceHost = new ServiceHost(typeof(GatherService));

calculatorSerivceHost.Opened += delegate
{
flag = 1;
};


calculatorSerivceHost.Open();

return flag;

}
}
“ServiceHost”会自动检索配置文件的服务配置信息,根据配置信息初始化服务。如果服务“经常持续”被访问,可以给服务一个持续开发的数据库连接。

4、服务配置信息
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="GatherServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>

<services>
<service name="Services.GatherService" behaviorConfiguration="GatherServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="Contracts.IGather"/>
<endpoint address="" binding="netTcpBinding" contract="Contracts.IGather"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:9998/GatherService"/>
<add baseAddress="net.tcp://localhost:9999/GatherService"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>

VS2010中自带“WCF”服务配置工具,可以使用它对“服务节点”等进行配置,比如配置“身份认证方式”,“服务行为”等。另外,WCF服务可以寄宿在子线程,以避免资源竞争。

你可能感兴趣的:(WCF)