一.定义服务契约接口
namespace Contracts
{
[ServiceContract(Name = "CalculatorService",Namespace = "liufuchu")]
public interface ICalculator
{
[OperationContract]
DataTable Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
}
二.定义接口的实现
namespace Services
{
public class CalculatorService :ICalculator
{
public DataTable Add(double n1, double n2)
{
DataTable dt = new DataTable();
dt.TableName = "liufuchu";
dt.Columns.Add("row1",typeof(double));
dt.Columns.Add("row2",typeof(double));
DataRow dr = dt.NewRow();
dr["row1"] = n1;
dr["row2"] = n2;
dt.Rows.Add(dr);
return dt;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
}
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="Services.CalculatorService">
<endpoint binding="wsHttpBinding" contract="Contracts.ICalculator"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
三.寄宿iis
类库输出目录为bin/
CalculatorService.svc 文件
<%@ ServiceHost Service = "Services.CalculatorService"%>
四.客户端调用
static void Main(string[] args)
{
using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorservice"))
{
ICalculator proxy = channelFactory.CreateChannel();
using (proxy as IDisposable)
{
DataTable dt = proxy.Add(1, 2);
Console.WriteLine(proxy.Divide(1, 2));
Console.WriteLine(proxy.Multiply(1, 2));
Console.WriteLine(proxy.Subtract(1, 2));
}
}
}
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://127.0.0.1/Services/calculatorservice.svc"
binding="wsHttpBinding"
contract="Contracts.ICalculator"
name="calculatorservice">
</endpoint>
</client>
</system.serviceModel>
</configuration>