在部署webservices时老是会遇到 http 404, 500 错误, 有很多次遇到的问题都是以前出现并解决过的, 只是自己忘记了,
又要重新google资料, 浪费了很多时间
, 所以写这篇BLOG作为参考, 如有遗漏, 欢迎补充
问题列表:
404 错误
解决办法:
- 打开IIS中的 web服务扩展,如果是禁止的, 请疯狂点击 “允许”按钮, 以表达心中的郁闷
- 打开站点的属性,确保 Aspnet 的版本是2.0的
- 在对应的 framework 安装目录下运行 aspnet_regiis /i (默认的路径是
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)
- 服务是否都已经打开, 需要的服务有 "ASP.NET 状态服务“, "IIS Admin Services", ”Remote Procedure Call“
500 错误
解决办法
500错误遇到的比较少, 如果使用了 404 错误中的所有方法也不能解决问题, 需要再看一下 ”Distributed Transaction Coordinator“
这个服务是否打开, 一般都是由于这个问题引起的。
也许不该抱怨,但还是想问一句
是不是每一个男人都有这么多不顺心的事,难道这就是传说中的“责任”吗?
今天忽然想起很久以前简单的模仿了一个, 呵呵(第一次 看到 Flashget 的多任务进度条工具时, 很是欣赏)
先放一个效果图

从图上可以看到有两个任务在运行, 各图示的解释:
灰色:还没开始执行的 cell
红色:正在执行的 cell
绿色:执行成功的 cell
黄色:执行出错的 cell
控件使用很简单, 大家看看注释应该就明白了
/// <summary>
/// 普通项目的颜色
/// </summary>
[Description("普通项目的颜色"), DefaultValue(typeof(Color), "Gray")]
public Color NormalColor
/// <summary>
/// 进行中的项目颜色
/// </summary>
[Description("进行中的项目颜色"), DefaultValue(typeof(Color), "Red")]
public Color ProcessingColor
/// <summary>
/// 成功项目的颜色
/// </summary>
[Description("已成功完成项目的颜色"), DefaultValue(typeof(Color), "Green")]
public Color CompleteColor
/// <summary>
/// 错误项目的颜色
/// </summary>
[Description("错误项目的颜色"), DefaultValue(typeof(Color), "Yellow")]
public Color ErrorColor
/// <summary>
/// 每一个任务包含的块数
/// </summary>
[Browsable(false)]
public List<int> Tasks
// 方法就一个
/// <summary>
/// 设置 Cell 的状态
/// </summary>
/// <param name="task">任务索引</param>
/// <param name="block">任务的块索引</param>
/// <param name="state">状态</param>
public void SetBlockState(int task, int block, TaskState state)
再贴一段测试代码(执行后就是上图中中的效果):
private void button1_Click(object sender, EventArgs e)
{
//开启两个线程, 模仿两个任务
new Thread(ThreadRun1).Start();
new Thread(ThreadRun2).Start();
}
//第一个任务
int thread1Index;
/// <summary>
/// 任务开始
/// </summary>
void Thread1Start()
{
MultiProgress.SetBlockState(0, thread1Index, HW.Windows.Forms.TaskState.PROCESSING);
}
/// <summary>
/// 任务完成
/// </summary>
void Thread1Complete()
{
if (thread1Index % 4 == 0)
MultiProgress.SetBlockState(0, thread1Index++, HW.Windows.Forms.TaskState.ERROR);
else
MultiProgress.SetBlockState(0, thread1Index++, HW.Windows.Forms.TaskState.COMPLETE);
}
void ThreadRun1()
{
for (int i = 0; i < MultiProgress.Tasks[0]; i++)
{
Invoke(new MethodInvoker(Thread1Start));
//处理耗时的操作
//
Thread.Sleep(300);
//设置状态
Invoke(new MethodInvoker(Thread1Complete));
}
}
//第二个任务, 代码和第一个一样。。。
int thread2Index;
void Thread2Start()
{
MultiProgress.SetBlockState(1, thread2Index, HW.Windows.Forms.TaskState.PROCESSING);
}
void Thread2Complete()
{
if (thread2Index % 4 == 0)
MultiProgress.SetBlockState(1, thread2Index++, HW.Windows.Forms.TaskState.ERROR);
else
MultiProgress.SetBlockState(1, thread2Index++, HW.Windows.Forms.TaskState.COMPLETE);
}
void ThreadRun2()
{
for (int i = 0; i < MultiProgress.Tasks[1]; i++)
{
Invoke(new MethodInvoker(Thread2Start));
//处理耗时的操作
//
Thread.Sleep(200);
//设置状态
Invoke(new MethodInvoker(Thread2Complete));
}
}
/// <summary>
/// 设置两个任务, 第一个有30个块, 第二个有50个块
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
MultiProgress.Tasks = new List<int>(new int[] { 30, 50 });
}
控件下载
private void button1_Click(object sender, EventArgs e)
{
//开启两个线程, 模仿两个任务
new Thread(ThreadRun1).Start();
new Thread(ThreadRun2).Start();
}
//第一个任务
int thread1Index;
/// <summary>
/// 任务开始
/// </summary>
void Thread1Start()
{
MultiProgress.SetBlockState(0, thread1Index, HW.Windows.Forms.TaskState.PROCESSING);
}
/// <summary>
/// 任务完成
/// </summary>
void Thread1Complete()
{
if (thread1Index % 4 == 0)
MultiProgress.SetBlockState(0, thread1Index++, HW.Windows.Forms.TaskState.ERROR);
else
MultiProgress.SetBlockState(0, thread1Index++, HW.Windows.Forms.TaskState.COMPLETE);
}
void ThreadRun1()
{
for (int i = 0; i < MultiProgress.Tasks[0]; i++)
{
Invoke(new MethodInvoker(Thread1Start));
//处理耗时的操作
//

Thread.Sleep(300);
//设置状态
Invoke(new MethodInvoker(Thread1Complete));
}
}
//第二个任务, 代码和第一个一样。。。
int thread2Index;
void Thread2Start()
{
MultiProgress.SetBlockState(1, thread2Index, HW.Windows.Forms.TaskState.PROCESSING);
}
void Thread2Complete()
{
if (thread2Index % 4 == 0)
MultiProgress.SetBlockState(1, thread2Index++, HW.Windows.Forms.TaskState.ERROR);
else
MultiProgress.SetBlockState(1, thread2Index++, HW.Windows.Forms.TaskState.COMPLETE);
}
void ThreadRun2()
{
for (int i = 0; i < MultiProgress.Tasks[1]; i++)
{
Invoke(new MethodInvoker(Thread2Start));
//处理耗时的操作
//

Thread.Sleep(200);
//设置状态
Invoke(new MethodInvoker(Thread2Complete));
}
}
/// <summary>
/// 设置两个任务, 第一个有30个块, 第二个有50个块
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
MultiProgress.Tasks = new List<int>(new int[] { 30, 50 });
}
一个比较搞笑的贴, 摘几个比较BH的回复
1. 里边有个小机器人在不停的品尝
评:难怪每次饭都不够吃, 下次多煮点
2. 传说是某某挨踢工程师的杰作 写了套C#的程序! 我有源码!
评:开个源看看。。
3. 饭告诉锅的.我熟了!
评:没听见啊。。。
4. 煮多了,就有经验了。。。
评:人工智能的典范
摘要: 工作好忙。。。所以现在才来更新。。。有了前面的铺垫,要加入功能就很简单了,下面我们加入对函数的支持一、函数的要点有3个1. 名称: 没有名字可程序就不能识别了,呵呵 例: Sin, Cos, Abs 等2. 参数:一个函数至少要有一个参数,参数必须放到括号里, 多个参数用逗号(,)分隔3. 计算:函数必须有一个输出值二、了解了这几点,加入函数的功能还是比较容易的1.根据函数的要点定义基类 Func...
阅读全文
摘要: 中缀转后缀需要处理的有:1. 操作数,操作符的提取2. 括号等关系到运算符优先级的符号3. 一元操作符(如 +(正), -(负)) 等4. 操作符和操作数的匹配,括号的匹配,(函数参数的个数是否正确等)基本思路如下:用一个链表 List<ExpressionToken> 储存将要生成的后缀表达式用一个栈 Stack<OperatorType> 储存操作符判断当前节点, 如果...
阅读全文
摘要: 12 + sin(sqr(9) + 9) + abs(-90)给这么一段字符串给你, 要如何才能正确计算出它的值? (注: 值应为 103 )算术表达式的计算有几种方法,本文只讨论“后缀表达式(也叫'逆波兰表达式')方法”后缀表达式是啥意思呢? 顾名思义,就是操作符在操作数的后面,比如 12+36 转换为后缀表达式后就变成12 36 + 注:本文中的后缀表达式是用 List...
阅读全文