简单的WCF服务

公用类库:

总共一个项目:Common

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Common
 8 {
 9     public class SysInfo
10     {
11         public string CurrentTime { get; set; }
12     }
13 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Runtime.Serialization.Json;
 7 using System.IO;
 8 
 9 namespace Common
10 {
11     public class JsonHelper
12     {
13 
14         /// <summary>  
15         /// 将对象转化为Json字符串   
16         /// </summary>  
17         /// <typeparam name="T">源类型</typeparam>  
18         /// <param name="obj">源类型实例</param>  
19         /// <returns>Json字符串</returns>  
20         public static string GetJsonFromObj<T>(T obj)
21         {
22             DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
23             using (MemoryStream ms = new MemoryStream())
24             {
25                 jsonSerializer.WriteObject(ms, obj);
26                 return Encoding.UTF8.GetString(ms.ToArray());
27             }
28         }
29 
30         /// <summary>  
31         /// 将Json字符串转化为对象  
32         /// </summary>  
33         /// <typeparam name="T">目标类型</typeparam>  
34         /// <param name="strJson">Json字符串</param>  
35         /// <returns>目标类型的一个实例</returns>  
36         public static T GetObjFromJson<T>(string strJson)
37         {
38             T obj = Activator.CreateInstance<T>();
39             using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
40             {
41                 DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
42                 return (T)jsonSerializer.ReadObject(ms);
43             }
44         }
45 
46     }
47 }

 

服务端:

总共两个项目:ServiceSet、WCFServer

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.ServiceModel;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace ServiceSet
 9 {
10     [ServiceContract(Name = "LogisticsService", Namespace = "http://localhost/")]
11     public interface ILogistics
12     {
13         /// <summary>
14         /// 查询当前时间
15         /// </summary>
16         [OperationContract]
17         string GetDate(string guid);
18     }
19 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using Common;
 7 
 8 namespace ServiceSet
 9 {
10     public class LogisticsService : ILogistics
11     {
12         public string GetDate(string guid)
13         {
14             SysInfo info = new SysInfo();
15             info.CurrentTime = DateTime.Now.ToString("HH:mm:ss:fff");
16             return JsonHelper.GetJsonFromObj<SysInfo>(info);
17         }
18     }
19 }
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <system.serviceModel>
 4     <behaviors>
 5       <serviceBehaviors>
 6         <behavior name="metadataBehavior">
 7           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:3899/LogisticsService/metadata" />
 8         </behavior>
 9       </serviceBehaviors>
10     </behaviors>
11     <services>
12       <service behaviorConfiguration="metadataBehavior" name="ServiceSet.LogisticsService">
13         <endpoint address="http://127.0.0.1:3899/LogisticsService" binding="wsHttpBinding" bindingConfiguration="NoneSecurity" contract="ServiceSet.ILogistics" />
14       </service>
15     </services>
16     <bindings>
17       <wsHttpBinding>
18         <binding name="NoneSecurity"
19           maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
20           <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
21           <security mode="None"/>
22         </binding>
23       </wsHttpBinding>
24     </bindings>
25   </system.serviceModel>
26   <startup>
27     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
28   </startup>
29 </configuration>
 1 using ServiceSet;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.ServiceModel;
 6 using System.Text;
 7 using System.Threading;
 8 using System.Threading.Tasks;
 9 
10 namespace WCFServer
11 {
12     public class Program
13     {
14         public static void Main(string[] args)
15         {
16             try
17             {
18                 using (ServiceHost host = new ServiceHost(typeof(LogisticsService)))
19                 {
20                     host.Opened += delegate
21                     {
22                         Console.WriteLine("{0}\t服务已经启动!", DateTime.Now.ToString("HH:mm:ss:fff"));
23                     };
24                     host.Open();
25                     while (true)
26                     {
27                         Console.WriteLine("{0}\t程序正常运行中。", DateTime.Now.ToString("HH:mm:ss:fff"));
28                         Thread.Sleep(10000);
29                     }
30                 }
31             }
32             catch (Exception ex)
33             {
34                 Console.WriteLine("{0}\t启动出错:{1}", DateTime.Now.ToString("HH:mm:ss:fff"), ex.Message);
35             }
36         }
37     }
38 }

 

客户端:

总共一个项目:WCFClient

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6 using System.Threading.Tasks;
 7 using WCFClient.LogisticsService;
 8 using Common;
 9 
10 namespace WCFClient
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             LogisticsServiceClient client = new LogisticsServiceClient();
17             for (int i = 1; i < 1000; i++)
18             {
19                 Thread.Sleep(3000);
20                 string guid = Guid.NewGuid().ToString();
21                 string result = client.GetDate(guid);
22                 SysInfo info = JsonHelper.GetObjFromJson<SysInfo>(result);
23                 Console.WriteLine("{0}\t服务器时间:{1}", DateTime.Now.ToString("HH:mm:ss:fff"), info.CurrentTime);
24             }
25         }
26     }
27 }

 

注:如果要真正实现分布式,必须把127.0.0.1改成真正的IP地址。

posted @ 2013-05-08 11:10  ha666  阅读(304)  评论(0编辑  收藏  举报
ha666@ha666.com