[转载]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现 – 沫尘 – 博客园.
上篇已经设计出比较完善的数据库了,这篇开始进入代码。 首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间前缀。
采用接口方式,共8个项目:7个类库和一个MVC项目, 分别为:
显示层——MVC项目
业务逻辑层——访问接口IBLL、具体实现BLL
数据访问层——访问接口IDAL、具体实现DAL
数据(模型)——DataModel
通用方法——Common
仓储——Factory
这里的仓储并不为了生产业务逻辑层和数据访问层的接口,而是为了存放EntityFramework上下文对象和一些缓存管理,业务逻辑层和数据访问层的接口生产(实现)工作我会交给Spring.NET注入实现。 框架搭建好之后如下:
框架搭建好了,接下去把数据库添加进来,在DAL中(注意是DAL不是datamodel)添加新项,选择数据–ADO.NET实体数据模型:
取个名字,就叫WeixinModel吧, 选择从数据库生成,配置一下数据库连接到之前生成的数据库,一路下一步,最后加载到edmx, 在edmx上右键–添加代码生成项,选择代码:
选DbContext Generator, 然后保存一下edmx, 之后把edmx和weixinmodel.tt复制到DataModel,删除DAL中的edmx和weixinmodel.tt, 在datamodel中打开weixinmodel.tt保存一下即可, 另外需要在DAL中保留的WeiXinModel.Context.cs中声明datamodel命名空间。
框架和数据模型都有了,接下去在DAL、IDAL、BLL、IBLL中按照正确的引用层次添加引用,并写几个常用方法,就可以开始在显示层中使用了,
这里举例在DAL中写添删改查方法:
<span class = "com" > //添加</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > T </span><span class = "typ" >AddEntity</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "typ" >DbContext</span><span class = "pln" > db</span><span class = "pun" >,</span><span class = "pln" >T entity</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "kwd" > where </span><span class = "pln" > T </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Entry</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "pln" >entity</span><span class = "pun" >).</span><span class = "typ" >State</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >EntityState</span><span class = "pun" >.</span><span class = "typ" >Added</span><span class = "pun" >;</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >SaveChanges</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > entity</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //修改</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > bool </span><span class = "pln" > </span><span class = "typ" >UpdateEntity</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "typ" >DbContext</span><span class = "pln" > db</span><span class = "pun" >,</span><span class = "pln" >T entity</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "kwd" > where </span><span class = "pln" > T </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Set</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>().</span><span class = "typ" >Attach</span><span class = "pun" >(</span><span class = "pln" >entity</span><span class = "pun" >);</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Entry</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "pln" >entity</span><span class = "pun" >).</span><span class = "typ" >State</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >EntityState</span><span class = "pun" >.</span><span class = "typ" >Modified</span><span class = "pun" >;</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >SaveChanges</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > true </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //删除</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > bool </span><span class = "pln" > </span><span class = "typ" >DeleteEntity</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "typ" >DbContext</span><span class = "pln" > db</span><span class = "pun" >,</span><span class = "pln" >T entity</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "kwd" > where </span><span class = "pln" > T </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Set</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>().</span><span class = "typ" >Attach</span><span class = "pun" >(</span><span class = "pln" >entity</span><span class = "pun" >);</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Entry</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "pln" >entity</span><span class = "pun" >).</span><span class = "typ" >State</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >EntityState</span><span class = "pun" >.</span><span class = "typ" >Deleted</span><span class = "pun" >;</span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >SaveChanges</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > true </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > // 返回一个对象</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > T </span><span class = "typ" >InfoEntities</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "typ" >DbContext</span><span class = "pln" > db</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "typ" >Expression</span><span class = "pun" ><</span><span class = "typ" >Func</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > bool </span><span class = "pun" >>></span><span class = "pln" > whereLambda</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "kwd" > where </span><span class = "pln" > T </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > db</span><span class = "pun" >.</span><span class = "typ" >Set</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>().</span><span class = "typ" >Where</span><span class = "pun" ><</span><span class = "pln" >T</span><span class = "pun" >>(</span><span class = "pln" >whereLambda</span><span class = "pun" >).</span><span class = "typ" >FirstOrDefault</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "pun" >}</span> |
对应的把接口、业务逻辑层都写上。
现在来到显示层,默认的MVC项目是返回VIEW, 这里我们不需要返回页面, 把home中的index改成Void返回类型, 接下去就是接收微信发来的请求进行判断了,验证请求—-接收POST数据—分析XML—-解析成自己想要的数据
入口:首先验证消息来源是微信服务器,然后解析收到的xml,解析成功有数据则执行LookMsgType方法来进行处理
<span class = "kwd" > private </span><span class = "pln" > IBLL</span><span class = "pun" >.</span><span class = "typ" >IDoWei</span><span class = "pln" > </span><span class = "typ" >BLLWei</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "typ" >DbContext</span><span class = "pln" > dbHome </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > private </span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > token </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >></span><span class = "pln" > xmlModel </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >>();</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Index</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > dbHome</span><span class = "pun" >=</span><span class = "typ" >FContext</span><span class = "pun" >.</span><span class = "typ" >WeiXinDbContext</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "com" > //xml字符串</span><span class="pln"> </span><span class = "kwd" > string </span><span class = "pln" > xmlData </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >.</span><span class = "typ" >Empty</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "com" > //请求类型</span><span class="pln"> </span><span class = "kwd" > string </span><span class = "pln" > method</span><span class = "pun" >=</span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >HttpMethod</span><span class = "pun" >.</span><span class = "typ" >ToLower</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > signature </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >QueryString</span><span class = "pun" >[</span><span class = "str" > "signature" </span><span class = "pun" >];</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > timestamp </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >QueryString</span><span class = "pun" >[</span><span class = "str" > "timestamp" </span><span class = "pun" >];</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > nonce </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >QueryString</span><span class = "pun" >[</span><span class = "str" > "nonce" </span><span class = "pun" >];</span><span class = "pln" > </span><span class = "com" > //验证接入和每次请求验证真实性</span><span class="pln"> </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >method </span><span class = "pun" >==</span><span class = "pln" > </span><span class = "str" > "get" </span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "typ" >CheckSign</span><span class = "pun" >(</span><span class = "pln" >signature</span><span class = "pun" >,</span><span class = "pln" >timestamp</span><span class = "pun" >,</span><span class = "pln" >nonce</span><span class = "pun" >))</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Often</span><span class = "pun" >.</span><span class = "typ" >ResponseToEnd</span><span class = "pun" >(</span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >QueryString</span><span class = "pun" >[</span><span class = "str" > "echostr" </span><span class = "pun" >]);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > else </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Response</span><span class = "pun" >.</span><span class = "typ" >Status</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "403" </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "typ" >Often</span><span class = "pun" >.</span><span class = "typ" >ResponseToEnd</span><span class = "pun" >(</span><span class = "str" > "" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //处理接收到的POST消息</span><span class="pln"> </span><span class = "kwd" > else </span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >method </span><span class = "pun" >==</span><span class = "pln" > </span><span class = "str" > "post" </span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > using </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "typ" >Stream</span><span class = "pln" > stream </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Request</span><span class = "pun" >.</span><span class = "typ" >InputStream</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Byte</span><span class = "pun" >[]</span><span class = "pln" > byteData </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Byte</span><span class = "pun" >[</span><span class = "pln" >stream</span><span class = "pun" >.</span><span class = "typ" >Length</span><span class = "pun" >];</span><span class = "pln" > stream</span><span class = "pun" >.</span><span class = "typ" >Read</span><span class = "pun" >(</span><span class = "pln" >byteData</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" >0</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "typ" >Int32</span><span class = "pun" >)</span><span class = "pln" >stream</span><span class = "pun" >.</span><span class = "typ" >Length</span><span class = "pun" >);</span><span class = "pln" > xmlData </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >Encoding</span><span class = "pun" >.</span><span class = "pln" >UTF8</span><span class = "pun" >.</span><span class = "typ" >GetString</span><span class = "pun" >(</span><span class = "pln" >byteData</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(!</span><span class = "kwd" > string </span><span class = "pun" >.</span><span class = "typ" >IsNullOrEmpty</span><span class = "pun" >(</span><span class = "pln" >xmlData</span><span class = "pun" >))</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > try </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > xmlModel </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >ReadXml</span><span class = "pun" >.</span><span class = "typ" >GetXmlModel</span><span class = "pun" >(</span><span class = "pln" >xmlData</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > catch </span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "com" > //未能正确处理 给微信服务器回复默认值</span><span class="pln"> </span><span class = "typ" >Often</span><span class = "pun" >.</span><span class = "typ" >ResponseToEnd</span><span class = "pun" >(</span><span class = "str" > "" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >xmlModel</span><span class = "pun" >.</span><span class = "typ" >Count</span><span class = "pln" > </span><span class = "pun" >></span><span class = "pln" > </span><span class = "lit" >0</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > msgType </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >ReadXml</span><span class = "pun" >.</span><span class = "typ" >ReadModel</span><span class = "pun" >(</span><span class = "str" > "MsgType" </span><span class = "pun" >,</span><span class = "pln" > xmlModel</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >LookMsgType</span><span class = "pun" >(</span><span class = "pln" >msgType</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > else </span><span class = "com" > //除了post和get外 如head皆视为非法请求</span><span class="pln"> </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Response</span><span class = "pun" >.</span><span class = "typ" >Status</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "403" </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "typ" >Often</span><span class = "pun" >.</span><span class = "typ" >ResponseToEnd</span><span class = "pun" >(</span><span class = "str" > "" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > dbHome</span><span class = "pun" >.</span><span class = "typ" >Dispose</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "pun" >}</span> |
这里用到的验证方法:
<span class = "com" > /// <summary></span><span class="pln"> </span><span class = "com" > /// 验证签名</span><span class="pln"> </span><span class = "com" > /// </summary></span><span class="pln"> </span><span class = "com" > /// <param name="signature"></param></span><span class="pln"> </span><span class = "com" > /// <param name="timestamp"></param></span><span class="pln"> </span><span class = "com" > /// <param name="nonce"></param></span><span class="pln"> </span><span class = "com" > /// <returns></returns></span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > bool </span><span class = "pln" > </span><span class = "typ" >CheckSign</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > signature</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > timestamp</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > nonce</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >List</span><span class = "str" >< string ></span><span class = "pln" > list </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >List</span><span class = "str" >< string ></span><span class = "pun" >();</span><span class = "pln" > list</span><span class = "pun" >.</span><span class = "typ" >Add</span><span class = "pun" >(</span><span class = "pln" >token</span><span class = "pun" >);</span><span class = "pln" > list</span><span class = "pun" >.</span><span class = "typ" >Add</span><span class = "pun" >(</span><span class = "pln" >timestamp</span><span class = "pun" >);</span><span class = "pln" > list</span><span class = "pun" >.</span><span class = "typ" >Add</span><span class = "pun" >(</span><span class = "pln" >nonce</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "com" > //默认排序</span><span class="pln"> list</span><span class = "pun" >.</span><span class = "typ" >Sort</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > tmpStr </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >.</span><span class = "typ" >Empty</span><span class = "pun" >;</span><span class = "pln" > list</span><span class = "pun" >.</span><span class = "typ" >All</span><span class = "pun" >(</span><span class = "pln" >l </span><span class = "pun" >=></span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > tmpStr </span><span class = "pun" >+=</span><span class = "pln" > l</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > true </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >});</span><span class = "pln" > tmpStr </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >System</span><span class = "pun" >.</span><span class = "typ" >Web</span><span class = "pun" >.</span><span class = "typ" >Security</span><span class = "pun" >.</span><span class = "typ" >FormsAuthentication</span><span class = "pun" >.</span><span class = "typ" >HashPasswordForStoringInConfigFile</span><span class = "pun" >(</span><span class = "pln" >tmpStr</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "str" > "SHA1" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "com" > //验证</span><span class="pln"> </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >tmpStr </span><span class = "pun" >==</span><span class = "pln" > signature</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > true </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > </span><span class = "kwd" > false </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span> |
仓储中的EF上下文:
<span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "typ" >DbContext</span><span class = "pln" > </span><span class = "typ" >WeiXinDbContext</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >DbContext</span><span class = "pln" > dbcontext </span><span class = "pun" >=</span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >WeiXinEntities</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "com" > //创建</span><span class="pln"> dbcontext</span><span class = "pun" >.</span><span class = "typ" >Configuration</span><span class = "pun" >.</span><span class = "typ" >AutoDetectChangesEnabled</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > false </span><span class = "pun" >;</span><span class = "com" > //自动检测配置更改</span><span class="pln"> dbcontext</span><span class = "pun" >.</span><span class = "typ" >Configuration</span><span class = "pun" >.</span><span class = "typ" >LazyLoadingEnabled</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > true </span><span class = "pun" >;</span><span class = "com" > //延迟加载</span><span class="pln"> dbcontext</span><span class = "pun" >.</span><span class = "typ" >Configuration</span><span class = "pun" >.</span><span class = "typ" >ValidateOnSaveEnabled</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > false </span><span class = "pun" >;</span><span class = "com" > //自动跟踪</span><span class="pln"> </span><span class = "kwd" > return </span><span class = "pln" > dbcontext</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span> |
Common中的解析微信发来的XML方法
<span class = "com" > //把接收到的XML转为字典</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >></span><span class = "pln" > </span><span class = "typ" >GetXmlModel</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > xmlStr</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >XmlDocument</span><span class = "pln" > doc </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >XmlDocument</span><span class = "pun" >();</span><span class = "pln" > doc</span><span class = "pun" >.</span><span class = "typ" >LoadXml</span><span class = "pun" >(</span><span class = "pln" >xmlStr</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >></span><span class = "pln" > mo </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >>();</span><span class = "pln" > </span><span class = "kwd" > var </span><span class = "pln" > data </span><span class = "pun" >=</span><span class = "pln" > doc</span><span class = "pun" >.</span><span class = "typ" >DocumentElement</span><span class = "pun" >.</span><span class = "typ" >ChildNodes</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > for </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pln" > i </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "lit" >0</span><span class = "pun" >;</span><span class = "pln" > i </span><span class = "pun" ><</span><span class = "pln" > data</span><span class = "pun" >.</span><span class = "typ" >Count</span><span class = "pun" >;</span><span class = "pln" > i</span><span class = "pun" >++)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > mo</span><span class = "pun" >.</span><span class = "typ" >Add</span><span class = "pun" >(</span><span class = "pln" >data</span><span class = "pun" >.</span><span class = "typ" >Item</span><span class = "pun" >(</span><span class = "pln" >i</span><span class = "pun" >).</span><span class = "typ" >LocalName</span><span class = "pun" >,</span><span class = "pln" > data</span><span class = "pun" >.</span><span class = "typ" >Item</span><span class = "pun" >(</span><span class = "pln" >i</span><span class = "pun" >).</span><span class = "typ" >InnerText</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > mo</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > ////从字典中读取指定的值</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > </span><span class = "typ" >ReadModel</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > key</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "typ" >Dictionary</span><span class = "pun" ><</span><span class = "kwd" > string </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pun" >></span><span class = "pln" > model</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > str </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "" </span><span class = "pun" >;</span><span class = "pln" > model</span><span class = "pun" >.</span><span class = "typ" >TryGetValue</span><span class = "pun" >(</span><span class = "pln" >key</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "kwd" > out </span><span class = "pln" > str</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > if </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >str</span><span class = "pun" >==</span><span class = "pln" > </span><span class = "kwd" > null </span><span class = "pun" >)</span><span class = "pln" > str </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "" </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > return </span><span class = "pln" > str</span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span> |