如果 .NET Core 项目发布到服务器上报以下错误:
HTTP Error 502.5 - Process Failure
Common causes of this issue:
The application process failed to start
The application process started but then stopped
The application process started but failed to listen on the configured port
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681
在服务器上安装最新的 .NET Core Runtime 即可(Windows Server 选择 Hosting Bundle Installer)。
* 仅列出部分数据表及字段
mag_ads 广告
名 | 类型 | 注释 |
id | int | |
title | varchar | 标题 |
pic | varchar | 图片 |
begin_time | int | 开始时间 |
end_time | int | 结束时间 |
link | varchar | 链接 |
…… |
mag_circle 圈子(相当于 PC 版的版块)
名 | 类型 | 注释 |
id | int | |
name | varchar | 名称 |
…… |
mag_common_applaud_(n) 点赞详情表(分表)n 与 content_id 末位一致
名 | 类型 | 注释 |
id | int | |
type | varchar | 类型(主题/回复/打卡等) |
content_id | int | 内容 id,末位与表名后缀一致 |
user_id | int | 用户 id |
status | int | 1:点赞;0:取消点赞 |
mag_common_attachment_(n) 附件详情表(分表)n 与 aid 末位一致
名 | 类型 | 注释 |
aid | int | 附件ID(末位与表名后缀一致) |
…… |
mag_common_attachment_index 附件索引表
名 | 类型 | 注释 |
id | int | 附件ID |
user_id | int | 用户ID |
table_id | int | 分表标志 |
…… |
mag_common_comment_index 评论索引表(相当于 PC 版的回复表)
名 | 类型 | 注释 |
id | int | 附件ID |
content_id | int | 文章ID(mag_show_content) |
user_id | int | 用户ID |
content | varchar | 评论内容 |
…… |
mag_common_content_log 对圈子内容的操作日志(点赞、评论等)
名 | 类型 | 注释 |
id | int | |
type | varchar | 用户ID |
type_value | int | 内容ID |
user_id | int | 用户ID |
create_time | int | 操作时间 |
…… |
mag_show_content 圈子内容(相当于 PC 版的主题表)
名 | 类型 | 注释 |
id | int | |
user_id | int | 用户ID |
content | varchar | 内容 |
pics | varchar | 以半角逗号分隔的图片(附件)id |
…… |
mag_user 用户表
名 | 类型 | 注释 |
user_id | int | 用户ID |
name | varchar | 用户名/昵称 |
head | varchar | 头像 |
…… |
在 Global.asax 的 Application_Start() 方法中添加以下代码,作用是在应用程序启动时预先访问一遍所有动态页面,办法虽土,但很有效。
本代码适合 Web Forms 项目,不适合 MVC 项目;修改代码中的 domain 值为真实的网站域名
代码整理中……
在 IIS 中设置应用程序池最长时效或永不过期,则效果更佳。
在应用程序池中选中网站对应的应用程序池,在右侧“操作”窗口中选择“正在回收...”
取消“固定间隔”框中的所有选项,确定。
实践证明,近 200 个动态页面一次性访问需要耗时近 10 分钟,发布后 10 分钟内无法正常浏览网站是同样是无法忍受的。因此更改方案为:
做一个 Winform 应用程序来定时访问这些页面,30 秒一个,一个半小时能完成一个循环,对正常浏览的影响非常小。
在 Windows 上安装 MySQL Server,提示需要安装 Microsoft Visual C++ 2013 Redistributable,但 MySQL Installer 安装向导中提供的 C++ 是 12.0.30501 版本:
导致无法正常安装 MySQL Server,仍然提示:
This application requires Visual Studio 2013 Redistributable. Please install the Redistributable then run this installer again.
解决办法是下载安装 Update for Visual C++ 2013 and Visual C++ Redistributable Package,即 12.0.40649.5 版本
安装成功
首先要有个工行U盾,一台手机。
苹果用户在 App Store 中搜索 中国工商银行 和 工商银行通用U盾。
安卓用户从 m.icbc.com.cn 网站下载安装客户端。
以 iPhone 为例:
打开工行U盾 App,选择U盾厂商(我的是“天地融”,无法确定的可以在此查询)
把U盾插入手机的耳机孔,状态显示“已连接”
此时点击“查看证书”提示未安装证书
打开中国工商银行 App,进入:我的 - 安全中心 - 支付管理 - 安全介质管理 - U盾证书下载
依照提示安装证书
现在可以愉快地大额转账啦!
删除根目录的 PrecompiledApp.config 文件(记得备份)
在 IIS 中“重新启动”该网站
原因:之前应该是发布的时候选了“在发布期间预编译”。发布后,服务器上会有这个预编译相关的文件(包含 bin 目录下也会有),其实 Application_BeginRequest() 方法是执行的,只是重新发布后没有更新而已(猜的)。具体关于发布的配置请自行了解。
在 NuGet 中安装
Microsoft.AspNetCore.Session
和Newtonsoft.Json
打开 Startup.cs,在 ConfigureServices 方法中加入(视情况配置相关属性)
services.AddSession(options => { // 设置了一个较短的时间,方便测试 options.IdleTimeout = TimeSpan.FromSeconds(10); options.CookieHttpOnly = true; });
在 Configure 方法中加入
app.UseSession();
添加 Extensions 文件夹并添加类 SessionExtensions.cs
using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class SessionExtensions { public static void Set<T>(this ISession session, string key, T value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T Get<T>(this ISession session, string key) { var value = session.GetString(key); return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value); } }
使用方法
HttpContext.Session.Set("abc", 123); var v1 = HttpContext.Session.Get<int>("abc"); HttpContext.Session.Remove("abc"); var v2 = HttpContext.Session.Get<int>("abc"); // v1 = 123, v2 = 0
在 VMware 虚拟机上安装 macOS 黑苹果系统的过程比较简单,分以下几个步骤进行:
1、用 Securable 工具检测电脑是否支持“虚拟技术”
2、下载并安装 VMware,写本文时最新版本 v12.5.5
3、下载 macOS 懒人版安装镜像,写本文时最新版本 v10.12.4
4、下载并安装 Unlocker,写本文时最新版本 v2.0.8,用于在 VM 中新建虚拟机时显示 Apple Mac OS X
5、新建虚拟机,用记事本打开虚拟机的配置文件 .vmx,底部加一行:smc.version = "0"
6、设置(详见下方链接图文教程)
7、将镜像文件后缀名 .cdr 改为 .iso,加载到虚拟机的 CD/DVD 中,启动,运行磁盘工具进行分区
8、安装完成后推出 CD/DVD,安装 VMware Tools
9、如果觉得卡,进行一些操作
请参考:Hegel_SU 撰写的《VMware 12 安装 macOS S 10.12》详细图文教程
示例:
<form action="javascript:fn_submit()">
<div>
手机号码:
<input type="tel" required="required" pattern="1\d{10}" title="手机号码由以1开头的11位数字组成" />
</div>
<div>
身份证号码:
<input type="text" required="required" pattern="\d{17}[\dX]" title="身份证号码由18位数字或17位数字加字母X组成" />
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>
<script>
function fn_submit() {
alert('执行了方法“fn_submit()”,可以使用 ajax 提交数据');
}
</script>
form 的 action 使用 javascript 调用 fn_submit 方法,在这个方法内可以使用 jQuery 的 ajax 来 POST 数据,当然还可以搭配使用 HTML5 的 FormData。这样相比于直接在 submit 按钮上写事件的好处是可以用到 HTML5 的表单验证功能,并且不会重载页面。
Vue 版本:
<form v-on:submit="fn_submit" method="dialog">
</form>
var app = new Vue({
el: '#app',
methods: {
fn_submit: function () {
alert('执行了方法“fn_submit()”,可以使用 ajax 提交数据');
}
}
});
公众号的报警群中经常收到这样的消息:
Appid: *
昵称: *
时间: *
内容: 微信服务器向公众号推送消息或事件后,开发者5秒内没有返回
次数: *分钟 *次
错误样例: [OpenID=*][Stamp=*][3rdUrl=http://api.socialbase.cn/extapi/wechat/message/*/][IP=*][Event=Click Menu Url]
报警排查指引,请见: http://url.cn/ab0jnP
除此之外还有另外一个问题,就是客户端发送图片后会收到两条回复,一条是“印美图”处理打印图片链接,另一条是识脸判断年龄的图文。前者是之前与印美图公司合作的与快速打印照片设备配合吸粉的功能,后者是跳转到使用 FACE++ 的页面显示图片中人物的年龄。
几天来一直找不出原因,代码中搜索错误关键词无果,被动回复消息整个流程断点逐步调试也没有发现哪里有返回“请点击这里预览印美图 点击此处裁剪相片并打印。”
不是开发模式的问题,那一定在公众平台,登录后终于在“开发”的“基本配置”页找到了“管理已授权的第三方平台”,找到“Socialbase”取消授权即可。
整个世界安静了……