每年春节买票都成为相当重要的事情,快人一步基本能尽可能的抢占先机。使用抢票软件尽可能的减少手工操作,从而提高抢票的成功机率,由于时间误差也可会丧失先机,所以同步系统时间也是重要一步。为了可以自动的同步本地时间,所以就使用C#实现一个时间同步小工具。
只针对Windows系统的时间同步且使用抢票平台的不在此列。
using System;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WindowsDateTimeSynchronization
{
public class Da...
5年前 (2020-02-08) 4713℃ 4评论
4喜欢
由于项目中需要实时消息,所以就使用了ASP.NET(Core) SignalR实时通讯库。因为业务服务与通讯服务是独立的,所以涉及到跨域的问题, 浏览器抛出的异常非常明显,这个是明显跨域相关内容。 报错信息如下:
Access to XMLHttpRequest at ‘http://192.168.2.13:5005/api/v1/commommessage/messageHub/negotiate’ from origin ‘http://127.0.0.1:5500’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control...
5年前 (2020-01-13) 3949℃ 0评论
30喜欢
因某些需求,需要将指定的对象序列化放到缓存中,在使用Newtonsoft.Json序列化时候报错,异常信息清晰明显就是循环引用问题。具体错误如下:
详细异常如下:
fail: System.Exception[-2146233088] Self referencing loop detected for property ‘Ancestor’ with type ”. Path ‘Descendants[0]’. Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property ‘Ancestor’ with type ‘*’. Path &...
5年前 (2020-01-11) 4127℃ 0评论
5喜欢
网站内容在Windows环境下并没有出现任何问题,但是在Linux 系统Centos的Docker环境下就出现了相关错误。这让人一脸蒙逼啊, 未能加载libdl库。使用了EPPlus处理Excel,其内部设置了字体大小以及颜色之类的东西,使用了‘ System.Drawing.Font ’的相关内容。由于Linux系统中Docker环境下缺少相关库,故而出现异常。具体错误请看以下内容。
报错内容:
fail: System.Exception[-2146233036] The type initializer for ‘Gdip’ threw an exception. System.TypeInitializationException: The type initializer for ‘Gdip’ threw an exception. —> System...
5年前 (2019-12-31) 1892℃ 0评论
3喜欢
Quartz.NET
Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
官网:http://www.quartz-scheduler.net/
源码:https://github.com/quartznet/quartznet
示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
其实Quartz是一个完全由java编写的开源作业调度框架,Quartz是OpenSymphony开...
5年前 (2019-12-16) 3092℃ 0评论
3喜欢
背景后台任务和计划任务最终可能需要在基于微服务的应用程序或任何类型的应用程序中实现。 使用微服务体系结构的区别在于,可以实现一个微服务进程/容器来托管这些后台任务,以便根据需要对其进行减少/增加,或者甚至可以确保它运行该微服务进程/容器的单个实例。
一般在 .NET Core 中,我们将这些类型的任务称为托管服务 ,因为它们是托管在主机/应用程序/微服务中的服务/逻辑。 请注意,在这种情况下,托管服务仅表示具有后台任务逻辑的类。
前言
从 .net core 2.0 开始,开始引入 IHostedService,可以通过 IHostedService 来实现后台任务,但是只能在 WebHost 的基础上使用。从 .net core 2.1 开始微软引入通用主机(Generic Host),使得我们可以在不使用 Web 的情况下,也可以使用 IHostedSe...
5年前 (2019-12-07) 2955℃ 0评论
3喜欢
主要目的演示如何使用 ML.NET 为鸢尾花数据集构建聚类分析模型。了解ML.NET使用基本流程。
问题
问题的本质即基于花卉特征将鸢尾花数据归入不同的组。 这些特征包括:花萼的长度和宽度以及花瓣的长度和宽度。 需通过这些特征了解数据集的结构,并预测数据实例与此结构的拟合相似分类。
创建控制台应用程序
打开 Visual Studio。 从菜单栏中选择“文件” > “新建” > “项目”。 在“新项目”对话框中,依次选择“Visual C#”和“.NET Core”节点。 然后,选择“控制台应用程序(.NET Core)”项目模板。 在“名称”文本框中,键入“MLNet”,然后选择“确定”按钮 在项目中创建一个名为“数据”的目录来保存数据集和模型文件: 在“解决方案资源管理器”中,右键单击项目,然后选择“添加”...
6年前 (2019-05-27) 1272℃ 0评论
0喜欢
...
6年前 (2019-03-23) 2336℃ 0评论
25喜欢
因为使用.net core写了一些简单的控制台应用程序,并且需要一些配置信息。于是想是用.net framework中的 ConfigurationManager进行处理,发ConfigurationManager在.net core 中不被支持。
.net core配置说明
.NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。
IConfigurationR...
6年前 (2019-03-12) 1457℃ 0评论
1喜欢
在.net core 中使用了HttpClient库进行网络访问,有些网站成功,有些网络失败。报错内容如下:
The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.
‘gbk’ is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.Parameter name: name
报错
详细错误
“gbk”字符集不被...
6年前 (2019-03-10) 1826℃ 0评论
1喜欢
朋友发消息说他老婆公司资料无法拷贝出来,U盘以及常见的网盘全部无效。问我有没有其他办法,于是就使用asp.net core做了一个最简单的文件上传来试一试。理论上应该可行,因为新的上传网站以及页面元素没有在他们公司网监出现过,死马当作活马医吧!离职最后一天的最后2个小时了,时间紧任务哦!
对话
ASP.NET MVC操作支持使用简单模型绑定对较小文件进行单个或者多个文件上传。
使用模型绑定上传小文件
要上传较小的文件,可以使用多部分HTML表单或使用JavaScript构建POST请求。
<form action="/Home/UploadFiles" method="post" name="upload" enctype="multipart/form-data">
<div class="form-group">
...
6年前 (2019-01-10) 2184℃ 0评论
1喜欢
前提背景在清理以前相关代码时候,发现了之前使用表驱动的部分函数。所以,在这里简要的记录一下。
定义
数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至数据。
所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获指定的数据内容。
常用的查表方式
直接查询索引查询 分段查询
如果要把星期几用中文输出,无论是用if语句或switch语句都比较臃肿,如下:
static string GetChineseWeek(DayOfWeek week)
{
switch (week)
{
case DayOfWeek.Monday:...
6年前 (2019-01-06) 1433℃ 0评论
9喜欢
因某些原因需要在图片上添加文字水印、图片水印、水印旋转、可以指定水印9个位置(左上角、中上、右上角、左中、居中、右中、左下角、中下、右下角),所以这里做个简单的记录。本想在互联网上找到相关代码直接使用,经过一些测试发现并不适合目前的要求,所以就重新整理代码。
未加水印前
添加水印后
代码实现
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Watermarker
{
/// <summary>
/// 水印设置
/// </summary>
public clas...
6年前 (2019-01-04) 5101℃ 2评论
26喜欢
Windows API
Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
C#调用Windows API
C#调用Windows API之调用格式,在.Net Framework SDK文档中是比较零散。但在C#中使用Windows API最常见的方式是用DllImport 来进行处理,并 使用 C# 关键字 static 和 extern 声明方法...
6年前 (2018-12-27) 3303℃ 0评论
17喜欢
Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。
Base的索引表
Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64编码规定的,如下图:
base64编码表
Base64的原理
Base64的码表只有64个字符, 如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。
因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符;
如果是字符串转换为Base64码, 会先把对应的字符串转换为ascll码表对应的数字, 然后再把数字转换为2进制。
图片转化为base64
图片的 base64 ...
6年前 (2018-12-26) 3691℃ 0评论
14喜欢
情况背景
之前朋友让模仿的一个QQ群验证的Windows Form程序,需要加清除缓存的功能。关于判断登录的QQ是否已经加入指定的QQ群点击查看。由于使用的是.net 自带的WebBrower控件,其本身也是IE浏览器,所以只需要清除IE浏览器的缓存就可以了。这里调用RunDll32.exe来实现IE浏览器的缓存清除!
QQ 群验证
代码实现
public void IEClear()
{
try
{
Process process = new Process();
process.StartInfo.FileName = "RunDll32.exe";
process.StartInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 255";
process.Sta...
6年前 (2018-12-17) 1484℃ 0评论
6喜欢
什么是MIME
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
它是一个互联网标准,扩展了电子邮件标准,使其能够支持:非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。
这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7...
6年前 (2018-12-04) 3646℃ 0评论
2喜欢
C#对图片进行放大且按照像素,使用C#指针(要启用非安全代码)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
namespace ImageMagnifier
{
public class MagnifierImage
{
private int multiple = 2;
public int Multiple
{
get { return multiple;
}
set
{
multiple = value;
}
}
public Magnifier...
6年前 (2018-12-01) 1755℃ 0评论
0喜欢
共享内存
共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
C# 调用Win32 系统APi实现共享内存:
public class ShareMem
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg,...
6年前 (2018-11-30) 3884℃ 0评论
19喜欢
之前对接一个接口,实现加密文件上传,于是写了一个简单的方法进行调用。
public static class HttpUtil
{
/// <summary>
/// 向指定的URL进行post
/// </summary>
/// <param name="url"></param>
/// <param name="bodyPartList"></param>
/// <returns></returns>
public static string MultipartPost(string url, List<FormBodyPart> bodyPartList
, bool isBrowerUser...
6年前 (2018-11-15) 2725℃ 2评论
1喜欢
一、背景
朋友给了一个小的Windows应用程序,打开这个应用程序会让登录QQ,然后会判断登录的QQ是不是已经加入了指定的QQ群。如果已经加入,则可以继续使用软件,否则就退出这个程序,大致就是这样。朋友希望知晓这种判断qq是否加入指定QQ群的方法。如下图:
二、分析
这里使用fiddler进行抓包看一下,通过抓包结果来看,这个程序首先访问了http://qun.qzone.qq.com/,然后进行了授权登录,登成功之后就会回调到http://qun.qzone.qq.com/上,然后所有群号一览无余,就可以判断指定的群号了,基本上就是上图看到的界面了。fiddler抓包图如下:
三、实现
这里使用Microsoft .net的Windows Form实现,使用WebBrowser控件加载http://qun.qzone.qq.com/,登录成功只有使用正则匹配指定的群号来完成操作。代码...
7年前 (2018-10-21) 3609℃ 3评论
7喜欢
/// <summary>
/// 缓存帮助类
/// </summary>
public class MemoryCacheHelper
{
private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions());
/// <summary>
/// 验证缓存项是否存在
/// </summary>
/// <param name="key">缓存Key</param>
/// <returns></returns>
public stat...
7年前 (2018-10-14) 1971℃ 0评论
0喜欢
博易遵循 W3C 标准,具有极强的可扩展性、高性能、良好的 SEO 性能和非凡的用户体验。不仅如此,博易还拥有一批高质量的用户群,他们的支持使博易得以不断地发展。 博易不仅开源,而且免费。所有的技术支持全部都是无偿提供的!不过目前最新的BlogEngine.NET(博易)博客已经停止更新,现在主打了.net core的轻量级博客版本,叫Blogifier,接受有偿的主题定制等。不过无论是否收费,现在已经没有继续使用BlogEngine.NET(博易)这个博客了。之前使用过一段时间,自己也根据相关文档写了需要的一个插件,当文章发布后,产生(更新)根目录下的sitemap.xml。这里做个简单的记录。
using BlogEngine.Core.Web.Extensions;
using System;
using System.IO;
using System.Web.Hostin...
7年前 (2018-10-07) 2049℃ 0评论
0喜欢
因为程序中需要对指定文件进行压缩,然后再对已压缩的文件进行加密上传,所以,在网上找了一个已经实现的方法就用了。结果不用不知道,用了就差点挂掉,网上找到的类中解压会出问题,竟然能多出很多数据,压缩多级目录竟然出现目录错乱等诸多问题。最终,对出现的问题也进行了相关的修改(未发现的问题就不晓得了),利用C#的开源组件ICSharpCode.SharpZipLib实现,以下对代码就做下记录。
public static class ZipUtil
{
#region 压缩
/// <summary>
/// 递归压缩文件夹的内部方法
/// </summary>
/// <param name="folderToZip">要压缩的文件夹路径</p...
7年前 (2018-10-04) 2018℃ 0评论
0喜欢
/// <summary>
/// 封装了一些ShutDown中的功能
/// </summary>
public sealed class ShutDown
{
private ShutDown() { }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct tokpriv1luid
{
public int count;
public long luid;
public int attr;
}
[DllImport("kernel32.dll", Exac...
7年前 (2018-10-03) 1191℃ 0评论
0喜欢