认清自我,满足需求

         
 最近遇到一个新项目,需要与硬件结合,进行读取信息并保存在数据库中。业务要求也在昨天发布一个问题,当然感谢许多园内的朋友出谋划策,截图有真相!

就在前几天,周期性的厌恶工作的症状又发作了。整个人的状态跌入谷底
每天早晨起来就是莫名的不开心

     
2018年3月“关系”月,与原始股东的关系、与现在合伙人的关系、与未来合伙人的关系、与现在同事们的关系、与想恢复关系的男朋友的关系……

一、能够使用Control中的AOP实现非业务需求的功能

    图片 1

说实话工作压力不大,生活节奏也慢,按道理是很幸福的。但我一直感觉到不满足也不满意目前的工作。

     
从只会聊到“心经”两个字,到抄写心经、百度了解心经、背诵再到默写心经;这个过程诠释着整个阶段心理的状态;从抱怨到积极解决问题到不再解释……

本文目录

一、ActionFilterAttribute类

二、实现自定义Attribute

关于这个问题,我做了如下假设。目前处于测试状态,代码比较简单,具体功能已经实现。

之前我以为害怕在事业单位养老的环境里能力停滞不前,最后脱离社会再也走不出这个环境,就是我的症结。于是报名了理财班学习理财

     
在这个阶段里把《刚仁波齐》上演了一遍,设立目标、遇到问题解决问题、随后继续上路,果断去做比过度思考更重要,认清当下的第一需求,选择当下最合适的就好!

一、ActionFilterAttribute类

     1、首先一张比较丑的图片表名业务逻辑关系。

学习了1个多月,我依然觉得不满足,感觉生活里缺少了什么,于是开始了几周的低谷期。

     
在社群活动的邀请下参加两次沙龙活动,话题分别是“变美、赚钱、撩汉”、“梦想、赚钱、满足他人需求”,两次我的答案是“变‘美’自然就会赚钱也会撩好汉”,“满足互相需求自然又有了梦想也赚了钱”。另外自我修行很重要,一个人的人格品格很重要,尽量让自己避免暴力沟通,让所有的事情娓娓道来,院子里有红花很美,赏之却不折之~

Action筛选条件的基类

图片 2

 1 using System;
 2 
 3 namespace System.Web.Mvc
 4 {
 5     // Summary:
 6     //     Represents the base class for filter attributes.
 7     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
 8     public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
 9     {
10         // Summary:
11         //     Initializes a new instance of the System.Web.Mvc.ActionFilterAttribute class.
12         protected ActionFilterAttribute();
13 
14         // Summary:
15         //     Called by the ASP.NET MVC framework after the action method executes.
16         //
17         // Parameters:
18         //   filterContext:
19         //     The filter context.
20         public virtual void OnActionExecuted(ActionExecutedContext filterContext);
21         //
22         // Summary:
23         //     Called by the ASP.NET MVC framework before the action method executes.
24         //
25         // Parameters:
26         //   filterContext:
27         //     The filter context.
28         public virtual void OnActionExecuting(ActionExecutingContext filterContext);
29         //
30         // Summary:
31         //     Called by the ASP.NET MVC framework after the action result executes.
32         //
33         // Parameters:
34         //   filterContext:
35         //     The filter context.
36         public virtual void OnResultExecuted(ResultExecutedContext filterContext);
37         //
38         // Summary:
39         //     Called by the ASP.NET MVC framework before the action result executes.
40         //
41         // Parameters:
42         //   filterContext:
43         //     The filter context.
44         public virtual void OnResultExecuting(ResultExecutingContext filterContext);
45     }
46 }

图片 3

OnActionExecuting:在Action执行之前执行该方法

OnActionExecuted:在Action执行之后执行该方法

OnResultExecuting:在Result执行之前执行该方法

OnResultExecuted:在Result执行之后执行该方法

 

直到我给自己做了几份职业规划相关的测试,仔细的了解了自己内心的需求。发现我其实对于物质、金钱没有太高的要求。但很渴望分享自己,渴望能够传播思想,帮助他人。

图片 4

二、实现自定义Attribute


做即使没有金钱回报依然觉得有价值的事情,才是我内在的驱动力,才是能够长久发展下去的。

在MVC框架基础上实现自定义Attribute只需实现ActionFilterAttribute中的虚方法即可

1.代码

图片 5

 1 using System.Web.Mvc;
 2 
 3 namespace MVC3.Demo.App_Code
 4 {
 5     public class LogActionFilter : ActionFilterAttribute
 6     {
 7         public string LogMessage { get; set; }
 8 
 9         public override void OnActionExecuting(ActionExecutingContext filterContext)
10         {
11             filterContext.HttpContext.Response.Write(@"在Action执行之前执行" + LogMessage + "<br />");
12             base.OnActionExecuting(filterContext);
13         }
14 
15         public override void OnActionExecuted(ActionExecutedContext filterContext)
16         {
17             filterContext.HttpContext.Response.Write(@"在Action执行之后执行" + LogMessage + "<br />");
18             base.OnActionExecuted(filterContext);
19         }
20 
21         public override void OnResultExecuting(ResultExecutingContext filterContext)
22         {
23             filterContext.HttpContext.Response.Write(@"在Result执行之前执行" + LogMessage + "<br />");
24             base.OnResultExecuting(filterContext);
25         }
26 
27         public override void OnResultExecuted(ResultExecutedContext filterContext)
28         {
29             filterContext.HttpContext.Response.Write(@"在Result执行之后执行" + LogMessage + "<br />");
30             base.OnResultExecuted(filterContext);
31         }
32     }
33 }

图片 6

2.使用

1         [LogActionFilter(LogMessage = "日志写入:Validation方法")]
2         public ActionResult Validation()
3         {
4             return View();
5         }

3.效果

 图片 7

 

图片 8

版权:http://www.cnblogs.com/iamlilinfeng

做笔记使用

 用户customer 他可以去A  B  C  D
四个办事处去登记信息。这样假设每个办事处有一个登记人员,假设customer
选择了 A ,(可能是离A比较近,他不想跑了)

登记人员说出示的卡。登记人员就把的卡往Arecorder
一放,点击鼠标,用户的信息就可以显示到web界面上了。看到这里是不是感觉很简单,不就是Arecorder
把customer的信息发送给web页面了吗? 

你说的没有错,就是这么简单。那简单咱就技术实现吧。

      技术实现:需要考虑哪些问题。

      1》  A recorder 只是一台具有连接网络或者局域网的计算机。 web
服务管理也不是部署在 A recorder
计算机上的,当然大家知道是部署在服务器上的。那么问题来了。要实现web服务器与Arecorder之间的通信怎么实现呢?

                       这也难不倒你,网络传输tcp
socket编程。。。不难。这里对于这个问题,我们不做深入探究。我使用的是WCF技术。

                2》  好了,web服务与A recorder
通信的问题解决了,那就写程序白。。。。。,半个小时过去了,你的编码速度很牛啊,service端和client的代码都搞定了,现在就测试可不可以呢。说道这里,service端的代码发布到与web服务IIS上面去,client代码当然去监控A
recorder了,这里本来没有任何问题,我们知道service
的程序时一直运行的,它们之间的关系可以简单一张图表示,当然只是简单的
request-response模式。

                                                                       
   图片 9

看到这里,你可能发现问题。我应该何时请求呢,我贴卡的时候去Request,这是个好主意,Request
发送到哪里呢,肯定是service呀,不然还能发送到哪了,哈,那么问题来了?
web服务管理不是给你一个人使用的,也就是说有好多人都在使用这套管理系统,可能赵四
王五 都在 登记用户信息,好你拿着custmoer的卡一刷,Request
就发送出去了,那么它会发送到你打开的web 页上吗???,或者发送到
赵四、或者王五的打开的页面上呢,那么这样这么多不确定性,确实不好办呢。怎么办???赶紧想呀,经理崔项目呢。。。

      3》
时间一点一点过去,你想呀,突然脑袋灵光一现,为什么我非要等到customer刷卡的时,去Request呢,我为什么不能使登记人员去把握Request呢。而
A recorder
成为service呢。这样之间的关系不就清楚了吗。是呀到这里,恭喜你。那还等什么赶紧code呀。。。。,测试下,果然不错。哈哈哈。

      4》经理说,我们不是需要一个A recorder,而是有
B C D 。。。,你一个都搞定了,多加几个也是没有问题的吧。瞬间整个人都不好了。。。,经理说了那也上呀,多个录卡器,多个工作登记人员,要想实现信息登录的正确性,怎么办,web服务又是大家共享的,顺着思路想下去,。。。。,多个Recorder,那就要区分每个Recorder,那好办,每个都绑定一个固定的IP不就可以了吗?
然后让web request ,好呀,干嘛,code呀。。。。,不对,我web request
了,那我应该需要的是哪个recorder的信息呢,怎么办?
这可能会造成我把别的customer的信息请求过来的。要是事先能知道Request哪一个就好了,怎么办,那就让登记人员,在请求的时候把选中那个recorder。不就可以了吗。是呀,如图:

      图片 10

5》到这里,通过分析已经找到了,解决方案,那么接下来要看编程技术了,这里只是简单的分享下。

 coding: Recorder 端的代码。wcf基本结构四层结构;

图片 11

Contract:

   

 图片 12

   1—》IOctorpusService.cs

图片 13图片 14

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.ServiceModel;
 6 namespace DataWorld.Octorpus.Contract
 7 {
 8     [ServiceContract]
 9     [ServiceKnownType(typeof(RecordMintor))]
10     public interface IOctorpusService
11     {
12         [OperationContract]
13         [FaultContract(typeof(OctorException))]
14         string GetOctorpusNo();
15     }
16 }

View Code

  2—-》OctorException.cs

 

图片 15图片 16

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Runtime.Serialization;
 6 namespace DataWorld.Octorpus.Contract
 7 {
 8     [DataContract]
 9    public class OctorException
10     {
11         #region 私有类
12         private string _operation;
13         private string _errorMessage; 
14         #endregion
15         #region 构造函数
16         public OctorException(string operation, string errorMessage)
17         {
18             this._operation = operation;
19             this._errorMessage = errorMessage;
20         } 
21         #endregion
22         #region 公共方法
23         [DataMember]
24         public string Operation
25         {
26             get { return _operation; }
27             set { _operation = value; }
28         }
29         [DataMember]
30         public string ErrorMessage
31         {
32             get { return _errorMessage; }
33             set { _errorMessage = value; }
34         } 
35         #endregion
36 
37     }
38 }

View Code

  3—-》RecordMintor.cs

 

图片 17图片 18

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Runtime.Serialization;
 6 namespace DataWorld.Octorpus.Contract
 7 {
 8     [DataContract]
 9     public class RecordMintor
10     {
11         #region 私有字段
12         private string _CarNo;
13         private string _OctorpusNo; 
14         #endregion
15         #region 构造函数
16         public RecordMintor(string carno, string octorpusno)
17         {
18             this._CarNo = carno;
19             this._OctorpusNo = octorpusno;
20         } 
21         #endregion
22         #region 公共属性
23         [DataMember]
24         public string CarNo
25         {
26             get { return _CarNo; }
27             set { _CarNo = value; }
28         }
29         [DataMember]
30         public string OctorpusNo
31         {
32             get { return _OctorpusNo; }
33             set { _OctorpusNo = value; }
34         }
35         #endregion
36     }
37 }

View Code

Service:

 图片 19

   1–》OctorpusService.cs

图片 20图片 21

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using DataWorld.Octorpus.Contract;
 6 namespace DataWorld.Octorpus.Service
 7 {
 8    public  class OctorpusService:IOctorpusService
 9     {
10 
11         public string GetOctorpusNo()
12         {
13           //  OctorException oe = new OctorException("Server exception", "Restart server");
14 
15             RecordMintor rm = new RecordMintor(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
16             //throw new NotImplementedException();
17             Console.WriteLine(rm.CarNo);
18             return rm.OctorpusNo;
19         }
20     }
21 }

View Code

hosting:

    图片 22

 1–》 program.cs

   

图片 23图片 24

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataWorld.Octorpus.Service;
using System.ServiceModel;
namespace DataWorld.Octorpus.Hosting
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(OctorpusService)))
            {
                host.Opened += delegate { Console.WriteLine("listening..."); };
                host.Open();
                Console.Read();
            }
        }
    }
}

View Code

 2–》App.config

 

图片 25图片 26

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <system.serviceModel>
 4     <bindings>
 5       <wsHttpBinding>
 6         <binding name="wsHttpBinding">
 7           <security mode="None">
 8           </security>
 9         </binding>
10       </wsHttpBinding>
11     </bindings>
12     <behaviors>
13       <serviceBehaviors>
14       
15         <behavior name="OctorpusServiceBehavior">
16           <serviceMetadata httpGetEnabled="true"/>
17         </behavior>
18       </serviceBehaviors>
19     </behaviors>
20     <services>
21       <service name="Company.Octorpus.Service.OctorpusService" behaviorConfiguration="OctorpusServiceBehavior">
22         <endpoint address="" binding="wsHttpBinding" contract="Company.Octorpus.Contract.IOctorpusService" bindingConfiguration="wsHttpBinding"/>
23         <host>
24           <baseAddresses>
25             <add baseAddress="http://192.168.19.56:9999/Service"/>
26           </baseAddresses>
27         </host>
28       </service>
29     </services>
30   </system.serviceModel>
31 </configuration>

View Code

 client:我写在了web中;

 AutoGetCarNO.ashx

图片 27图片 28

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Web;
  4 
  5 namespace fairviewweb.Management
  6 {
  7     /// <summary>
  8     /// Summary description for AutoGetCarNO
  9     /// </summary>
 10     public class AutoGetCarNO : IHttpHandler
 11     {
 12         private DateTime _endTime;
 13         private bool _IsEndFlag = false;
 14         private string _msg=null;
 15         private Maticsoft.BLL.t_Recorder tbll = new Maticsoft.BLL.t_Recorder();
 16         public void ProcessRequest(HttpContext context)
 17         {
 18             context.Response.ContentType = "text/plain";
 19             string CarNodroplist = context.Request.QueryString["CarNodroplist"] == null ? string.Empty : context.Request.QueryString["CarNodroplist"].ToString();
 20             Maticsoft.Model.t_Recorder tmodel= tbll.GetModel(CarNodroplist.Trim());
 21             this._endTime=DateTime.Now.AddSeconds(4);
 22             switch (tmodel.IPADDRESS)
 23             {
 24                 case "ServiceReferenceA": try
 25                     {
 26                              ServiceReference1.OctorpusServiceClient  _octorpusNO = new ServiceReference1.OctorpusServiceClient();
 27                              this._msg = _octorpusNO.GetOctorpusNo();
 28                            while (!_IsEndFlag)
 29                            {
 30                                   
 31                                    if (!string.IsNullOrEmpty(this._msg))
 32                                    {
 33                                        _IsEndFlag = true;
 34                                    }
 35                                    if (this._endTime <= DateTime.Now)
 36                                    {
 37                                        _IsEndFlag = true;
 38                                    }
 39                              }
 40                              if (string.IsNullOrEmpty(this._msg))
 41                                    {
 42                                        context.Response.Write("timeout");
 43                                    }
 44                                    else
 45                                    {
 46                                        context.Response.Write(this._msg);
 47                                    }
 48                     }
 49                     catch (Exception ex)
 50                     {
 51                         string msg = ex.Message;
 52                         context.Response.Write("timeout");
 53                     }
 54                     break;
 55                 case "ServiceReferenceB": try
 56                     {
 57                        ServiceReference2.OctorpusServiceClient   _octorpusNO = new ServiceReference2.OctorpusServiceClient();
 58                        this._msg = _octorpusNO.GetOctorpusNo();
 59                        while (!_IsEndFlag)
 60                        {
 61                           
 62                            if (!string.IsNullOrEmpty(this._msg))
 63                                {
 64                                    _IsEndFlag = true;
 65                                }
 66                            if (this._endTime <= DateTime.Now)
 67                                {
 68                                    _IsEndFlag = true;
 69                                }
 70                        }
 71                        if (string.IsNullOrEmpty(this._msg))
 72                            {
 73                                context.Response.Write("timeout");
 74                            }
 75                            else
 76                            {
 77                                context.Response.Write(this._msg);
 78                             }
 79                     }
 80                     catch (Exception ex)
 81                     {
 82                         string msg = ex.Message;
 83                         context.Response.Write("timeout");
 84                     }
 85                     break;
 86                 case "ServiceReferenceC": try
 87                     {
 88                            ServiceReference1.OctorpusServiceClient _octorpusNO = new ServiceReference1.OctorpusServiceClient();
 89                            this._msg = _octorpusNO.GetOctorpusNo();
 90                            while (!_IsEndFlag)
 91                                {
 92                                          
 93                                            if (!string.IsNullOrEmpty(this._msg))
 94                                            {
 95                                                _IsEndFlag = true;
 96                                            }
 97                                            if (this._endTime <= DateTime.Now)
 98                                            {
 99                                                _IsEndFlag = true;
100                                            }
101                                }
102                                if (string.IsNullOrEmpty(this._msg))
103                                    {
104                                        context.Response.Write("timeout");
105                                    }
106                                else
107                                    {
108                                        context.Response.Write(this._msg);
109                                    }
110                     }
111                     catch (Exception ex)
112                     {
113                         //string msg = ex.Message;
114                         context.Response.Write("timeout");
115                     }
116                     break;
117             }
118 
119           
120             
121         }
122        
123         public bool IsReusable
124         {
125             get
126             {
127                 return false;
128             }
129         }
130     }
131 }

View Code

最后还给大家来个小贴图把:

前段的;

 图片 29

简单说明下,这个B代表是个Recorder
,然后去请求客户端。页面的实现是采用Ajax异步传输的,这里就不在累赘了。我只是采用这种办法,解决了,这个问题,如果你有更好的办法,可以继续交流。谢谢!

 

 

 

 

  

 

相关文章