windows communication foundation (workshop) 系列- creating a simple wcf service
这段时间开始研究WCF,发现了一个容易入门的学习教程,来自 Robert Shelton, Jr.的Windows Communication Foundation (Workshop) ,于是便学边做,顺便也翻译部分内容,基本是按照意思翻译的。在这之前请按装好相应的软件
开始正题,希望对大家有所帮助。
第一步:选择项目类型和模版
打开vs2005,选择网站,然后选择项目模版,选择“WCF Service”
确定后系统自动建好了一个基本的框架
第二步:在我们的服务中建立新的代码文件
当解决方案建立好后,你可以看到在App_Code/Services.cs 文件,这是一个例子文件,你可以用这个建立你的特性服务,我们决定自己建立一个
自己的服务文件。因此我们选择在App_Code文件夹中增加一个新文件 BankService.cs
第三步:增加必须的名字空间
打开BankService.cs,在顶部加入
using System.ServiceModel;
using System.Runtime.Serialization;
第四步:建立服务合约(Create the Contract for our Service)
先把程序贴出来在解释一下
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ServiceModel;
using System.Runtime.Serialization;
namespace BankServices
{
[ServiceContract] //申明这个类为服务公约
public interface IAccountActivities
{
[OperationContract] //申明公约操作方法
// Method to retrieve the Account Balance
decimal getBalance(string AccountNumber);
[OperationContract]
// Method to Debit (withdraw) money from the account
decimal debitAccount(string AccountNumber, decimal Amount);
[OperationContract]
// Method to Credit (deposit) money into the account
decimal creditAccount(string AccountNumber, decimal Amount);
}
//上面这个类就是一个接口类,完成和其他(比如客户端)程序的通信
//下面这个类是对这个接口的实现,这个不用多说了
public class AccountActivities : IAccountActivities
{
private decimal _currentBalance; // Holds the balance for the account
#region IAccountActivities Members
public decimal getBalance(string AccountNumber)
{
return _currentBalance;
}
public decimal debitAccount(string AccountNumber, decimal Amount)
{
_currentBalance = _currentBalance - Amount;
return _currentBalance;
}
public decimal creditAccount(string AccountNumber, decimal Amount)
{
_currentBalance = _currentBalance + Amount;
return _currentBalance;
}
#endregion
}
}
第五步:修改Service.svc文件
把代码给为如下内容:
<% @ServiceHost Language=C# Debug="true" Service="BankServices.AccountActivities" CodeBehind="~/App_Code/BankServices.cs" %>
第六步: 建立服务通信端(Create the Service End Points)
我们可以借助WCF服务配置软件完成这个,在vs2005的工具中可以找到
点File,选择打开,找到WCFservices\web.config,在你建的wcf服务程序目录下。
在Configuration导航条下,选择MyService,然后在Name属性力改为BankServices.AccountActivities;
然后再选择
在 Adviced下找到 Service behaviors节点
把returnFaults的name 改为 BankServicesBehavior
现在 我们使 Service Metadata 有效
选择增加,打开对话框后,选择ServiceMetadata 然后按下 “Add” 按钮。
选择serviceMetadata 属性,设置 “HttpGetEnabled” 属性为true.这个将允许我们的客户端通过http协议发现我们的服务
然后保存我们的设置。完毕。最终的结果看起来如下:
第七步:测试我们的服务
编译并生成程序,然后选择运行,出现文件列表选项,选择service.svc,然后会出现如下界面
第八步:发布站点
在菜单中选择发布站点,输入:http://localhost/services/bankaccountservices
选择OK,发布成功后在iis中就会看到。
服务这一步完成,下面我们开始客户端的开发
第一步:建立一个Form程序,完成后选择服务引用。
出现如下对话框,输入:http://localhost/services/bankaccountservices/service.svc
引用名字改为 ATMServices。选择增加
在Form1.cs中定义:,写一个调用函数
private ATMServices.AccountActivitiesClient myService = new ATMClient.ATMServices.AccountActivitiesClient();
decimal returnedBalance = 0;
decimal TransactionAmount = 123;
returnedBalance = myService.creditAccount("123", TransactionAmount);
returnedBalance就是通过调用服务接口计算出来的值。