使用方法简介:
下载及源码: http://www.aooshi.org/adf
项目添加引用:
Adf.dll
Adf.Cs.dll
protobuf-net.dll
三个程序集
创建通信接口,示例:
注: 不能含有泛型成员,不能是嵌套类型(类中类)
/// <summary> /// 业务接口 /// </summary> public interface ITest { /// <summary> /// 告知服务器客户端时间 /// </summary> /// <param name="time"></param> /// <returns></returns> bool NotifyTime(DateTime time); /// <summary> /// 返回一个指定SIZE的数组 /// </summary> /// <param name="size"></param> /// <returns></returns> int[] GetArray(int size); /// <summary> /// 获取一个分页数据,并指定pageindex,pagesize参数做为hash键 /// </summary> /// <param name="pageindex"></param> /// <param name="pagesize"></param> /// <param name="totalcount"></param> /// <returns></returns> [ClientHashKey("pageindex", "pagesize")] int[] GetDatas(int pageindex,int pagesize, out int totalcount); }
创建服务端业务,以实例接口,示例:
/// <summary> /// 服务端示例 /// </summary> public class TestServer : Adf.Cs.Example.ITest { //注意: 为了安全,用于CS的方法必需标记Command,不标记的为本地方法。 //不标记的情况下客户端请求将会出现找不到命令的异常 /// <summary> /// 告知我客户端时间 /// </summary> /// <param name="time"></param> /// <returns></returns> public bool NotifyTime(DateTime time) { //收到时间了,返回 true return true; } /// <summary> /// 返回指定大小的一组数据 /// </summary> /// <param name="size"></param> /// <returns></returns> public int[] GetArray(int size) { var rand = new Random(); var result = new int[ size ]; for (int i = 0; i < size; i++) { //随机生成一个数 result[i] = rand.Next(); } return result; } /// <summary> /// 返回一个分页数据 /// </summary> /// <param name="pageindex"></param> /// <param name="pagesize"></param> /// <param name="totalcount"></param> /// <returns></returns> public int[] GetDatas(int pageindex, int pagesize, out int totalcount) { //因为是示例,此处业务不完整, 直接返回指定尺寸数据 totalcount = int.MaxValue; return this.GetArray(pagesize); } }
服务端启动配置,示例
var logManager = new Adf.LogManager("test"); var listen = new Adf.Cs.ServerListen(logManager);
服务端需要的配置,示例
<configSections> <section name="ServerMap" type="System.Configuration.NameValueSectionHandler"/> </configSections> <!-- 服务映射 --> <ServerMap> <!-- 客户端Test映射到 Adf.Cs.ExampleServer 程序集的 Adf.Cs.ExampleServer.TestServer 类 --> <add key="Test" value="Adf.Cs.ExampleServer.TestServer,Adf.Cs.ExampleServer"/> </ServerMap> <appSettings> <!-- 服务端口 --> <add key="Port" value="4562"/> <!-- 日志存储路径 --> <add key="Log:Path" value="D:\logs\Adf.Cs\TestServer"/> <!-- 日志刷新时间间隔(秒) --> <add key="Log:FlushInterval" value="10"/> </appSettings>
创建客户端,示例:
/// <summary> /// 测试客户端 /// </summary> public static class TestClient { //指示服务名为: Test //服务器为配置文件中的: TestServer 节点 /// <summary> /// 通用实例 /// </summary> public static ITest Instance = Adf.Cs.CsHelper.GetClient<ITest>("Test", "TestServer"); }
使用示例:
var notifyResult = TestClient.Instance.NotifyTime(DateTime.Now); Console.WriteLine("告诉服务器客户端时间:" + notifyResult); var array = TestClient.Instance.GetArray(5); Console.WriteLine("从服务器获取到数据:" + Adf.ConvertHelper.ArrayToString(array, ",")); var totalcount = 0; var datas = TestClient.Instance.GetDatas(1, 10, out totalcount); Console.WriteLine("从服务器获取第1页数据:" + totalcount + Adf.ConvertHelper.ArrayToString(datas, ",")); Console.WriteLine("数据在服务器的总量为:"+ totalcount);
客户端需要的配置:
<configSections> <section name="TestServer" type="Adf.Config.IpGroupSection,Adf"/> </configSections> <appSettings> <!-- 日志存储路径 --> <add key="Log:Path" value="C:\Logs\Adf.Cs\TestClient"/> <!-- 日志刷新时间间隔(秒) --> <add key="Log:FlushInterval" value="10"/> </appSettings> <!-- Servers 指定, 当前仅开放一个服务 --> <TestServer hash="0"> <add ip="127.0.0.1" port="4562"/> </TestServer>
示例项目下载:
http://www.aooshi.org/adf/download/Adf.Cs.1.x.Example.zip