1.简单的WCF模型
1.结构
2.契约:
using System.ServiceModel;
using Rhythmk.Entity;
namespace Rhythmk.Contracts
{
[ServiceContract(Namespace="http://wwww.wangkun.com")]
publicinterface ICalculate
{
[OperationContract(Name="AddServices")]
double Add(double x, double y);
/*
Name :则体现在客户端调用此方法时候 显示的真实方法名
IsOneway:这意味着客户端仅仅是向服务端发送一个运算的请求
并不会通过回复消息得到任何运算结果。
*/
[OperationContract(Name ="AddStrServices")]
string Add(string x, string y);
}
}
using Rhythmk.Entity;
namespace Rhythmk.Contracts
{
[ServiceContract(Namespace="http://wwww.wangkun.com")]
publicinterface ICalculate
{
[OperationContract(Name="AddServices")]
double Add(double x, double y);
/*
Name :则体现在客户端调用此方法时候 显示的真实方法名
IsOneway:这意味着客户端仅仅是向服务端发送一个运算的请求
并不会通过回复消息得到任何运算结果。
*/
[OperationContract(Name ="AddStrServices")]
string Add(string x, string y);
}
}
3. 服务
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Rhythmk.Contracts;
using Rhythmk.Entity;
using System.ServiceModel;
using System.ServiceModel.Activation;
namespace Rhythmk.Services
{
///<summary>
/// 计算器
///</summary>
///
/*
通过
ADO.NET 数据服务[.svc] 建立服务宿主的时候 需要引用
*using System.ServiceModel.Activation;
*同时在服务类前面需要配置
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
*/
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
publicclass Calculate:ICalculate
{
publicdouble Add(double x, double y)
{
return x + y;
}
publicstring Add(string x, string y)
{
return"Result"+ x + y;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Rhythmk.Contracts;
using Rhythmk.Entity;
using System.ServiceModel;
using System.ServiceModel.Activation;
namespace Rhythmk.Services
{
///<summary>
/// 计算器
///</summary>
///
/*
通过
ADO.NET 数据服务[.svc] 建立服务宿主的时候 需要引用
*using System.ServiceModel.Activation;
*同时在服务类前面需要配置
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
*/
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
publicclass Calculate:ICalculate
{
publicdouble Add(double x, double y)
{
return x + y;
}
publicstring Add(string x, string y)
{
return"Result"+ x + y;
}
}
}
4.控制台进行寄宿
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Rhythmk.Services.Calculate" behaviorConfiguration="metaBehavior">
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="" contract="Rhythmk.Contracts.ICalculate">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:1234/Rhythmk.Services.Calculate"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Rhythmk.Services.Calculate" behaviorConfiguration="metaBehavior">
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="" contract="Rhythmk.Contracts.ICalculate">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:1234/Rhythmk.Services.Calculate"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
代码:
代码:
using System;
using System.ServiceModel;
using Rhythmk.Services;
namespace Rhythmk.ConsoleApp
{
class Program
{
staticvoid Main(string[] args)
{
CreateCalculateService();
}
staticvoid CreateCalculateService()
{
Console.WriteLine("----------CreateCalculateService---Star---------");
using (ServiceHost host =new ServiceHost(typeof(Calculate)))
{
host.Opened +=delegate { Console.WriteLine("CalculateService已经启动,按任意键终止服务!"); };
host.Open();
Console.Read();
}
}
}
}
using System;
using System.ServiceModel;
using Rhythmk.Services;
namespace Rhythmk.ConsoleApp
{
class Program
{
staticvoid Main(string[] args)
{
CreateCalculateService();
}
staticvoid CreateCalculateService()
{
Console.WriteLine("----------CreateCalculateService---Star---------");
using (ServiceHost host =new ServiceHost(typeof(Calculate)))
{
host.Opened +=delegate { Console.WriteLine("CalculateService已经启动,按任意键终止服务!"); };
host.Open();
Console.Read();
}
}
}
}
5.ADO.NET 数据服务[.svc] 建立服务宿主
Rhythmk.WebHostMonitor\Calculate\Calculate.svc
<%@ ServiceHost Language="C#" Debug="true" Service="Rhythmk.Services.Calculate" %>
6.客户端调用
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://wcf.wangkun.w/Calculate/Calculate.svc"
binding="basicHttpBinding" contract="Rhythmk.Contracts.ICalculate"
name="CalculateEndPoint">
</endpoint>
</client>
</system.serviceModel>
</configuration>
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://wcf.wangkun.w/Calculate/Calculate.svc"
binding="basicHttpBinding" contract="Rhythmk.Contracts.ICalculate"
name="CalculateEndPoint">
</endpoint>
</client>
</system.serviceModel>
</configuration>
代码:
using Rhythmk.Contracts;
using System.ServiceModel;
using System.Web.Services;
ChannelFactory<ICalculate> calculatorChannelFactory =new ChannelFactory<ICalculate>("CalculateEndPoint");
ICalculate proxy = calculatorChannelFactory.CreateChannel();
Utitl.Alert(proxy.Add(10, 20).ToString());
using System.ServiceModel;
using System.Web.Services;
ChannelFactory<ICalculate> calculatorChannelFactory =new ChannelFactory<ICalculate>("CalculateEndPoint");
ICalculate proxy = calculatorChannelFactory.CreateChannel();
Utitl.Alert(proxy.Add(10, 20).ToString());
一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。