本地C#程序链接时如下
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: TCP Provider, error: 0 – 远程计算机拒绝网络连接
起初猜想是 链接字符串出的问题,后来发现并不是原因是SQL2017的远程连接没有打开,在外围配置器里面,开启tcp/ip协议 并配置好端口号1433
本地C#程序链接时如下
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: TCP Provider, error: 0 – 远程计算机拒绝网络连接
起初猜想是 链接字符串出的问题,后来发现并不是原因是SQL2017的远程连接没有打开,在外围配置器里面,开启tcp/ip协议 并配置好端口号1433
去掉结尾的逗号 =LEFT(D2,LEN(D2)-1)
替换单元格的回车符
CLEAN函数可以删除文本中不能打印的字符。假如A1单元格包含换行符,可在B1单元格中输入公式:“=CLEAN(A1)”,即可删除换行符。
关键字:vm安装win10 原版
记得使用的UEFI的启动方式, 不是BIOS启动
使用的是UEFI的方式启动win10
步骤–开机进入固件设置选择Hard disk 作为第一个启动项。
然后重启客户机
然后进入界面 快速按一下 enter 键,就直接进入了安装界面
到时是选择shopify?还是选择独立站程序?我为什么选择独立站程序呢?
首先不是单纯的建站,不是从网上下载一套开源程序,安装插件,简单部署一下就上线
一个好的网站是一个非常复杂的系统:前端页面、后台操作、速度、安全、客户体验、功能模块
作为程序员你要熟悉各个层面,不仅仅是业务你要懂,优化体验你更要了解
网站的风格实现,怎么去做,这就需要更多的知识来支撑
一个网站涉及到下面诸多标签
C#,asp.net,SQL,sqlite,css,html,js,jquery,cdn,windows server,iis,MVC,动静分离
多语言,多模板,多货币
简单对比
1.流量方面
无论是shopify还是独立站程序,都不能带给你流量,流量要靠自己
2.最大优势
独立站程序最大的好处就是,不受限制,功能模块可以按照自己的业务需求来进行定制扩展,自由度很高
3.成本费用
独立站程序成本非常低,一个域名+一台服务器费用,shopify的费用收取
在顾小北文章中已经说了,熟悉shopify的自然知道
http://www.guxiaobei.com/shopify-website-building.html
4.批量站群
我想目前shopify还做不到,独立站程序能轻松搞定,各种模板各种产品,只要加服务器域名即可
独立站程序本身占用资源非常少
5.建站分析
网站的风格,自己用代码实现,不是类似wordpress的拖拽方式,虽然简单,但是存在代码冗余,影响解析
全部使用自己的代码实现,自由
最后总结
就像顾小北说的,我喜欢把流量掌握在自己手中,不受到平台政策等等各种影响
同样的我想把独立b2c网站技术掌握在自己手中,只要有域名+服务器,我就可以做出满足我业务需求的网站
售卖产品,不收平台限制。
这就是我一直在这方面,不断维护这套系统的原因,希望为更多的跨境电商提供技术支持
关键字:配置WindowS server 2012
安装中文语言包
关闭音量
关闭操作中心消息
设置更新模式,推荐更新,但是让我选择是否下载和安装
更改区域和Unicode的位置为中国
设置中文时区 北京
更新密码
重启服务器
安装IIS
https://jingyan.baidu.com/article/90895e0ffb5c1764ec6b0bbb.html
更改应用程序池32位的版本
显示桌面
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
安装GG浏览器
查看安装的.net版本
安装.net4.6 4.7
安装软件
7-zip
vcredist_x86
安全狗
开始优化服务
设置安全狗
配置IIS SSL
分区C盘保留60G
禁用IIS的日志
配置IP地址
加入环境变量
C:\Windows\System32\inetsrv
配置IIS . text/plain
在服务器端MIME 配置IIS【. text/plain】–注意此处有个小数点,主要是为了生存SSL证书,SSL证书生成的时候需要验证你的站点,所以此处需要配置后缀”.”
配置数据库驱动程序2007—-导入导出Excel格式的数据文件
Backend_ShoppingCart.html 购物车页面调用的模块
_w_cart_empty.html | 购物车为空模块 |
_w_cart_mobile.html | 手机端展示 |
_w_cart_pc.html | 电脑端展示 |
_w_coupon.html | 判断优惠码消息提示 |
_w_coupon_code.html | 展示优惠码 |
_w_layer.html | loading遮盖层 |
Backend_New_Shipping.html 确认客户收货地址页面调用的模块
_w_backend_new_shipping_hidden.html | 隐藏的提交参数 |
_w_address_detail.html | 遍历客户的收货地址 |
_w_get_ship_list.html | 遍历送货方式列表 |
Backend_New_Payment.html 确认客户账单地址页面调用的模块
_w_payment_order_detail_V2.html | 展示订单详情 |
_w_address_detail_for_payment.html | 展示地址详情 |
_w_get_pay_list.html | 展示支付方式 |
Backend_Complete.html 填写信用卡信息完成支付页面Backend_Complete_Western_Union.html 单独使用西联支付的说明页面Backend_Edit_Address.html 编辑【收货】地址页面Backend_Change_Payment_Address.html 修改添加账单地址的页面Backend_Login.html 登陆页面
_Form_Login.html |
Backend_Register.html 注册页面
_w_address_form_div.html | 注册表单:收货地址信息部分 |
_w_address_reg_div.html | 注册表单:用户信息部分 |
_Backend_footer.html backend头部_Backend_header.html backend尾部共计15个wid的小模块,9个页面
html_header.html
程序全局的头部<head></head>标签之间的代码,最最主要的功能就是根据不同的页面加载不同的样式表。
html_footer.html
程序的底部</body>标签之前,主要就是加载全局的js脚本,遵循“头部样式底部脚本的原则”
_OCT.html
定义了系统中使用的一些业务实例,实例在全局可用,最最靠前的一个wid部件
_SEO.html
定义系统的SEO三要素
_Self_Js.html
定义每个页面的一些个性化的js脚本,每个页面运行的js代码多少有些差异,我想让每个页面只加载并运行只属于自己的代码。我把它单独成一个wid部件,方便被各个页面所引用,这是早期的设计。后面我使用VH助手,对这个部件进行计算,并将计算结果压缩输出。VH是什么?后期我会讲解。此部件的输出调用在html_footer.html页面,在加载了所有的代码之后使用$VH.OutString(true)来输出这个部件。
_t_js.html
是我喜欢测试一些js代码在页面中运行的效果,测试通过之后将代码在拷贝到lib.js中
51.html
顾名思义,此处写网站的统计代码,单独分离出来,有好有坏,好处就是你可以只将此部件在需要统计的页面引用。
OctService页面服务类,请求上下文
封装了9个属性
数据:UserData,LangItems
用户:SessionID,CustomerID,IsLogin,Customer
业务:CartID,Currency,Language
下面我来说说这几个属性是怎么初始化的,小伙伴先有一个大概的了解,其实非常的简单,理解程序代码要先理解代码的执行流程。执行的流程必然有先后的顺序,下面我让大家看看Octopuscart的先后顺序是怎么走的。
在静态构造函数中加载语言包,静态构造函数只需要执行一次
此时LangItems被初始化
在构造函数中初始化:货币,语言,购物车ID
注意:构造函数中不能获得Session对象,所以此时不能对session进行任何的操作,但是可以对cookie进行操作
货币,语言,购物车ID会被保存到客户端的Cookie中,所以我们先在此处做一次初始化【PS:语言的暂时没用到】
以货币为例:货币在前台页面可以切换。
初始化过程是:先获取系统配置的货币–》Currency具有默认的值–》从cookie中读取客户端的货币代码–》根据此代码对Currency设置–》回写货币代码到cookie【重新刷新了客户端cookie的生命周期】
语言和购物车ID都是这个初始化过程,不过我的项目中语言没有实现,代码逻辑和货币一模一样,可以照葫芦画瓢。
到此时我们已经初始化了4个属性了:
LangItems–Currency–Language–CartID小伙伴继续往下走!
在ProcessRequest中此时Session才可以使用,所以此处可以判断用户是否登陆
HttpContext.Current.Session.SessionID就可以用了,所以一下子就能拿到SessionID,那么如果用户登陆了,就可以检查session,判断是否登陆了获取登陆用户的ID。
判断逻辑非常简单,根据OCKeys.Session_User_ID键值在会话中获取顾客的ID,如果顾客的ID>0,表示当前用户登陆了。
除此之外,还对cookie进行了检查,如果用户选择记住用户选项,那么看看cookie中保存的信息是否有效。如果有效,用于也处于登陆状态。
到此处我们就初始化了SessionID—IsLogin—CustomerID—Customer 等4个选项哦!对了是不是少了一个呢?UserData:UserData我是用来存取数据用的,它在用户登陆的时候会用到,此处先不做介绍。
001: 关于系统中自定义实体带来的弊端
死板不够灵活,查询是灵活多样的,获取数据之前我们不晓得需要什么字段的数据,如果事先定义好一个实体对象,那么获取的数据只能就是定义的类型,这个类型中有些字段我们不需要,但是它被定义了,我们可以初始化这些字段数据,但是总是感觉不好,你定义了,但是在此处查询中你又没有用到它,感觉啰嗦,所以使用通用的一个自定义实体。
002:以点打面
编写文章的时候采用以一点打面的手法来操作。比如写文章的时候可以从一个点入手,Octopus的Url重写;Octopus某个数据表设计手法等等,从细微之处入手,文章慢慢展开娓娓道来,不要一开始就将主题开展的特别宽泛。