一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
一个开源的强类型客户端(.NET中的OpenFegin)—RabbitGo在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似springcloud的openfegin。因为它们最终的行为就是构建一个message进行编码,发送,然后解码服务端的返回信息。在阅读openfegin的源码之后写了RabbitGo。一个简单的客户端调用示例最新的样本:https://github.com/RabbitTeam/go/tree/master/samples发生了什么?我们使用fiddler来监听请求信息。GetAsyncDeleteAsyncPostAsyncPutAsync特性丰富的拦截器(IAsyncRequestInterceptor、IAsyncExceptionInterceptor)可替换的编解码器(默认为json,使用Newton
.net下使用socket.io随笔记录
一、问题背景目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的尝试,也算是给自己增加增长见闻,由于我是做后端以及桌面程序开发,所以前端部分就不细聊,主要是针对桌面程序如何连接socket.io进行一个尝试二、基本逻辑图本地应用程序:部署在局域网内(可以联通外网),主要负责相关数据获取Web浏览器端:跟本地应用程序不是处于同一个网络,请求发起方中转服务(重点):中转服务集成认证功能,必须经过认证的客户端才允许进行连接,并且对于客户端要有唯一指定的ID进行连接操作整体思路如以上的流程图,由Web浏览器端开始发起请求,Web浏览器端通过连接中转服务,将信息发送给指定的本地应用程序,应用程序处理完成后,将结果通过原路径进行一个反馈二、客户端程序开发客户端SDK采用SocketIoClientDotNet,这是一个github上开源的,可以连接socket.io的客户端,支持.net3.5及以上,可以方便的帮助我们进行连
[Asp.net]web.config customErrors 如何设置?
摘要customErrors也经常在开发部署中看到
菜鸟之旅——学习线程(1)
菜鸟之旅——学习线程(1)上一篇主要介绍了进程和线程的一些基本知识,现在回归正题,我们来学一下线程的使用,本篇主要是使用新建线程和线程池的方式。线程先来介绍简单的线程使用:使用new方法来创建线程,至于撤销线程,我们不必去管(我也不知道怎么去管XD),因为CLR已经替我们去管理了。创建先来看一个简单的使用线程的例子:staticvoidMain(string[]args){Threadt1=newThread(Menthod1);Threadt2=newThread(Menthod2);t1.Start();t2.Start("线程2参数");Console.WriteLine("主线程的ID:{0}",Thread.CurrentThread.ManagedThreadId);Console.WriteLine("--------------------");Console.ReadLine();}staticvoidMenthod1(){Thread.Sleep(2000);Console.Write
C# BBcode 转 Markdown
本文告诉大家一个简单的方法从BBcode转为Markdown本文的方法都是使用正则转换,现在支持的代码只有很少的常用标签,如果大家发现有转换失败的,请帮我修改代码,估计代码我不会进行修改。最重要的就是转换url和image,那么主要就告诉大家如何转换这两个privatestaticstringConvertUrl(stringstr){varregex=newRegex(@"\[url=(.+?)\]((?:.|\n)+?)\[\/url\]");returnregex.Replace(str,"[$2]($1)");}这就是转换url的代码,里面用了正则。一般使用正则拿到的数据就是(里的数据,如上面的代码,可能看起来有些复杂,那么用下面的代码告诉大家。例如需要拿出123lindexifoo中的lindexi,那么正则可以这样写123(lindexi)foo如果需要拿到lindexi,可以使用下面代码varregex=newRegex(@"123(lind
在ASP.NET MVC中使用Web API和EntityFramework构建应用程序
最近做了一个项目技术预研:在ASP.NETMVC框架中使用WebAPI和EntityFramework,构建一个基础的架构,并在此基础上实现基本的CRUD应用。以下是详细的步骤。第一步在数据库中创建一张数据表,表名为Customer,见下图:第二步打开VisualStudio,新建项目。选择'ASP.NETWebApplication',命名为'WebApi'。我们要创建一个'WebAPI',在模板中选择'WebAPI',点击'确定'。第三步接下来我要添加一个类。右键点击这个webapi项目,添加一个'ADO.NETEntityDataModel'。添加'EFDesignerfromdatabase',点击'下一步'。在配置窗口中添加新连接,输入服务器名称,选择数据库,点击'确定'。点击'下一步',选择要关联的数据表。点击'完成'。第四步现在的工作就是要为WepApi添加控制器了。右键选择'controllers'文件夹。选择'MVC5Controll
使用xUnit为.net core程序进行单元测试(4)
第1部分:http://www.cnblogs.com/cgzl/p/8283610.html第2部分:http://www.cnblogs.com/cgzl/p/8287588.html第3部分:http://www.cnblogs.com/cgzl/p/8438019.html请使用这个项目的代码:https://pan.baidu.com/s/1i7d8z2H数据驱动的测试打开PlayerCharacterShould.cs添加几个Fact测试方法:[Fact]publicvoidTakeZeroDamage(){_sut.TakeDamage(0);Assert.Equal(100,_sut.Health);}[Fact]publicvoidTakeSmallDamage(){_sut.TakeDamage(1);Assert.Equal(99,_sut.Health);}[Fact]publicvoidTakeMediumDamage(){_sut.TakeDamage(50);Asser
[Asp.net mvc]Html.ValidationSummary(bool)
摘要对ValidationSummary是HtmlHelper的扩展方法,用来返回System.Web.Mvc.ModelStateDictionary(即ModelState)对象中的验证消息的未排序列表(ul元素)。一个例子@Html.ValidationSummary(true):告知辅助方法排除属性级别的错误。换而言之,就是告知ValidationSummary方法只显示ModelState中与模型本身相关的错误,而不显示那些与具体模型属性相关的错误。false,会显示当前模型的所有错误。定义////摘要://返回System.Web.Mvc.ModelStateDictionary对象中验证消息的未排序列表(ul元素),还可以选择仅显示模型级错误。////参数://htmlHelper://此方法扩展的HTML帮助器实例。////excludePropertyErrors://true表示使摘要仅显示模型级错误;false表示使摘要显示所有错误。//
UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
UWP:在UWP中使用EntityFrameworkCore操作SQLite数据库在应用中使用SQLite数据库来存储数据是相当常见的。在UWP平台中要使用SQLite,一般会使用SQLiteforUniversalWindowsPlatform和SQLitePCL之类的库,前者是SQLite引擎库,而后者则提供了用于操作数据库的API,不过自从WindowsFallCreatorsUpdate之后,我们有了新的选择。由于UWP在其WindowsFallCreatorsUpdateSDK中增加对.NETStandard2.0的支持,并且EntityFrameworkCore2.0(以下简称EFCore)也支持.NETStandard2.0,这就使得我们能在UWP应用中使用EFCore来操作SQLite数据库。相比前者,使用EFCore最明显的优点是可以使用EntityFramework的特性(如FluentA
NLog使用教程
1.引入NLog.dll,这里使用的版本如下:2.建立NLog.config文件NLog.config文件配置如下(常用配置):
DevExpress使用教程:XtraGridControl动态添加右键菜单
在使用GridControl的时候经常需要添加右键菜单。一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单。但是涉及到一些单击事件会收到编辑器编辑状态影响,所以Mouse-Click事件不好用。幸好,GridView自带了一个默认的右键事件,专门用于弹出右键菜单用:PopupMenuShowing为了调用方便,设计成一个静态方法,调用的时候只用传入需要注册的网格就好:GridViewMenuHelper.CreateCopyCellItem(gdvw);这里,为传入网格添加一个名为【复制XXX】(XXX为列头)的方法,可以将鼠标点中的Cell中的数据复制到剪贴板。效果图如下:实现代码如下:#region添加复制Cell菜单publicstaticvoidCreateCopyCellItem(GridViewView){View.PopupMenuShowing+=newPopupMenuShowingEventHandler(Create_
Using Custom Domains With IIS Express In Asp.Net Core
UsingCustomDomainsWithIISExpressInAsp.NetCoreIISExpress是一个Mini版的IIS,能够支持所有的Web开发任务,但是这种设计有一些缺陷,例如只能通过localhost:
C#基础拾遗系列之一:先看懂IL代码
一、前言首先,想说说为什么要写这样系列的文章,有时候在和同事朋友聊天的时候,经常会听到这样的话题:(1)在这家公司没什么长进,代码太烂,学不到东西。(你有没有想想框架为什么这样写,代码还可以怎么去优化,比如公司使用Dapper,源码研究过没以及这样封装原因是啥)(2)现在只会Ctrl+CCtrl+V,不排除有时为了效率,包括我自己有时候也懒的写直接复制粘贴(是不是感觉距离语言的本质越来越远了)(3)Ctrl+CCtrl+V时间长了,都有点怀疑自己是否有勇气面试其他公司(是不是总给自己找借口,年龄大了,不敢疯狂了,当然大家不要误解,我没鼓励大家跳槽)(4)干了几年没什么提高(无论要精通那门技术,我们都应该从其本质出发)最近也在反思自己,之前看到博客园大神:fish-li的一篇文章《FishLi该如何帮助您呢?》其中说到:如何做一个有追求的技术人员,受益匪浅。以及张善友老师分享的关于雷果果的技术之路,大家都羡慕这些大神,何曾想过他们背后的付出,不要再抱怨环境不好,环境好也是给这些有准备和有追
OWIN:HttpListener
OWIN(OpenWebServerInterfacefor.NET)是一个规范和标准,OWIN定义了Web服务器与Web应用之间的标准接口,将应用与服务器解耦,使得便携式Web应用以及跨平台的愿望成为现实,标准的OWIN应用可以在任何OWIN兼容的服务器上运行,不再依赖与Windows和IIS。微软的Katana、Identity、SignalR等技术都是基于OWIN的标准中间件实现。OWIN4层结构在OWIN规范下可将一个Web应用解耦为4层:Host(宿主):应用程序的主进程,主要负责Server的启动、关闭,为Server加载各种Middleware,同时也装载Application。Server(服务器):绑定套接字并监听的HTTP请求,将请求的信息依照OWIN规范,包装成字典格式,传递到下层的Middleware。Middleware(中间件):当从客户端发送一个请求,这个请求就会传到OWIN管道中处理,Middleware就是组成管道的组
反反爬虫相关机制
反反爬虫相关机制来自于Scrapy官方文档描述:http://doc.scrapy.org/en/mast...通常防止爬虫被反主要有以下几个策略:动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)禁用Cookies(也就是不启用cookiesmiddleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为)可以通过COOKIES_ENABLED控制CookiesMiddleware开启或关闭设置延迟下载(防止访问过于频繁,设置为2秒或更高)GoogleCache和BaiduCache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。使用IP地址池:VPN和代理IP,现在大部分网站都是根据IP来ban的。使用Crawlera(专用于爬虫的代理组件),正确配置和设置下载中间件后,项目所有的request都是通过crawlera发出。DOWNLOADER_MIDDLEWARES={'scrapy_crawl
Python之Suds库调用WCF实现复杂参数序列化
Python之Suds库调用WCF实现复杂参数序列化今年主要做自动化测技术支持工作,最近一直在做接口自动化这块,前些天在研究将web页面模拟http进行接口自动化,这周杭州那边想测试WCF服务,所以这两天一直在探索。遇到的第一个问题就是服务参数传参序列化的问题,怎么让python这边创建的对象能被WCF识别到。正好在大学的时候也学了WCF,不过一直都没用过,这次算是重温一下,用的都是一些WCF基础。一、WCF服务准备1.定义契约Contract这里IServiceDemo.cs定义了服务契约IServiceDemo,并定义了几个操作契约OperationContract,5个操作契约传的参数不同,用来做测试,同时自定义了两个数据契约DataContract.并在ServiceDemo.svc中实现了上面操作契约。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.Serialization;usingSystem
【ASP.NET Core】给路由规则命名有何用处
【ASP.NETCore】给路由规则命名有何用处上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法,本篇咱们扯一下有关URL路径规则的名称问题。在扯今天的话题之前,先补充点东东。在上一篇中设置视图搜索路径时用到三个有序参数:{2}{1}{0},分别是Area、Controller、Action。其中说到几个特殊的视图,如_Layout.cshtml、_ViewStart.cshtml等。_Layout.cshtml页默认放在/Views/Shared目录下,但,_ViewStart.cshtml和_ViewImports.cshtml这两个不应该放在Shared目录下,一般应放到/Views下,这样它们可以作用于所有的视图。如果放到了Shared目录下,它们只对Shared目录中的视图起作用,而对于Views下的其他视图不起作用。比如,放到/Views下。Views(目录)│_ViewImports.cshtml│_ViewStart.cshtml│└─Home(目录,Controlle
淺談 macOS 的 App 安裝與反安裝
從AppStore下載這是最安全的方式,不用擔心安裝到惡意程式,也是Apple推薦的方式,將來app有任何更新,AppStore會通知你,使用體驗與iOS相同。下載dmg格式有的app並不想透過AppStore審核機制,而是自行在網站上提供下載dmg檔案。dmg本質是一個光碟映像檔,你只要將app拖曳到你自己的Applications目錄下就算安裝完成。這種方式理論上可能安裝到惡意程式,須自行承擔風險。下載pkg格式這種格式較少見,提供類似Windows下一步下一步的安裝方式,但Microsoft非常喜歡使用這種方式,如.NETCoreSDK、OfficeforMac、VisualStudioforMac…等。使用Homebrew安裝有一類工具是由Linuxopensource移植到macOS,如Git、NVM,這類工具就需要如Ubuntu
使用xUnit为.net core程序进行单元测试(3)
第1部分:http://www.cnblogs.com/cgzl/p/8283610.html第2部分:http://www.cnblogs.com/cgzl/p/8287588.html请使用这个项目作为练习的开始:https://pan.baidu.com/s/1ggcGkGb测试的分组打开Game.Tests里面的BossEnemyShould.cs,为HaveCorrectPower方法添加一个Trait属性标签:[Fact][Trait("Category","Enemy")]publicvoidHaveCorrectPower(){BossEnemysut=newBossEnemy();Assert.Equal(166.667,sut.SpecialAttackPower,3);}Trait接受两个参数,作为测试分类的Name和Value对.Build项目,RunAllTests,然后选择选择一下按Traits分组:这时,TestExplorer里面的tests将会这
我把石原里美的脸,合成到日本小短片儿里了!
请叫我制片师不知道差友们还记不记得两个月前Reddit上的科技界大事儿。。。有个id叫deepfakes的神人,用机器学习框架写了一套工具,把女星的脸接到了某些不可描述的影片中。和一般意义上的P图不同,这个方法是通过搭建神经网络来学习人脸,使替换以后的脸可以生动地模仿原来的表情,以假乱真。差评君这两天闲来无事,逛Reddit的时候发现有了个以deepfakes命名的板块,里面一堆人在讨论技术的同时还在贴着不可描述的内容,一片欣(hei)欣(hei)向(hei)荣,学术氛围浓厚。。。还有人分享大量训练样本差评君觉得有些奇怪,虽然说那位叫deepfakes的大神把工具开源了,但是以大部分网友的水平应该是不会用他的源码的,咋这个社区这么热闹了呢。。。直到我注意到了置顶帖,又有个id叫deepfakeapp的老哥在deepfakes的代码基础上做了一套傻瓜式工具,让没啥技术背景的人也能学会使用,这种分享精神实在是让我感动。。。可惜的是虽然哥们儿精神可嘉,不过