windows服务 post数据问题(急!急!)

西瓜爱吃橘子 西瓜爱吃橘子 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
虾米我用windows服务 扫描数据库将数据库里的数据Post给别的网站。
用的是计时器控件,每隔一定的时间进行自动扫描Post。

问题出现在运行服务后:只更新POST数据库中的两条记录,其它的就不动了,调试了下好像是在POST数据时 响应时间太长了,程序一直在POST等侍,我就把POST的响应时间TimeOut设置为10秒,结果还是只更新POST了两条记录,后面的就不动了。。

代码:

namespace RpEmailService
{
partial class MailService
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region 组件设计器生成的代码

/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.tmiService = new System.Timers.Timer();
((System.ComponentModel.ISupportInitialize)(this.tmiService)).BeginInit();
//
// tmiService
//
this.tmiService.Interval = 5000;
this.tmiService.Elapsed += new System.Timers.ElapsedEventHandler(this.tmiService_Elapsed);
//
// MailService
//
this.ServiceName = "MailService";
((System.ComponentModel.ISupportInitialize)(this.tmiService)).EndInit();

}

#endregion

private System.Timers.Timer tmiService;



}
}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using Model;
using hMailServer;
using System.Xml;
using System.Net;
using System.IO;
using System.Xml.Linq;
namespace RpEmailService
{

public partial class MailService : ServiceBase
{

public MailService()
{
InitializeComponent();
}

/// <summary>
/// 开始服务
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
this.tmiService.Enabled = true;
}

/// <summary>
/// 停止服务
/// </summary>
protected override void OnStop()
{
this.tmiService.Enabled = false;
}

private void tmiService_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.tmiService.Enabled = false;
CallBackMail();
this.tmiService.Enabled = true;
}

#region Post更新后的未回复邮件
/// <summary>
/// Post更新后的未回复邮件
/// </summary>
private void CallBackMail()
{
List<ClientMessages> replyMails = BLL.ClientMessagesBLL.SelectClientMessage();//获取未回复邮件
if (replyMails != null && replyMails.Count > 0)
{
//Post邮件信息,更新未回复邮件
for (int i = 0; i < replyMails.Count; i++)
{
FileStream fs = new FileStream("E://MailLog.txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);//重写该文件,不存在则创建
sw.WriteLine("----------------i--------------------");
sw.WriteLine(i);
sw.WriteLine("----------------replyMails.Count--------------------");
sw.WriteLine(replyMails.Count);
sw.Flush();
sw.Close();
fs.Close();
//得到邮件的装态
DeliveryStatus d = new DeliveryStatusClass();
String status = "";//邮件发送状态
switch (d.GetDeliveryStatus(replyMails[i].ServerMessageGUID, replyMails[i].ClientToAddress))
{
case "SendFail":
status = "发送失败";
break;
case "SendOK":
status = "发送成功";
break;
case "NoRecord":
status = "没有此记录";
break;
case "SendQuotas":
status = "发件人邮箱已满,拒绝发送邮件";
break;
default:
status = "未获取到发送状态";
break;
}
String mailStr = string.Format(@"<?xml version='1.0' encoding='UTF-8'?><SendStatus><mail gid={0} recipientaddress ={1} status={2}/></SendStatus>", replyMails[i].ClientMessageGID, replyMails[i].ClientToAddress, status);
try
{
String result = PostDataToUrl(mailStr, replyMails[i].ClientCallBackAddress);
if (result.Equals("OK"))
{
//更新邮件回复状态为已读
BLL.ClientMessagesBLL.UpdateMessageReplyed(replyMails[i].ClientMessageID);
}
}
catch (Exception ex)
{
FileStream fs1 = new FileStream("E://MailLog1.txt", FileMode.Append);
StreamWriter sw1 = new StreamWriter(fs);//重写该文件,不存在则创建

sw1.WriteLine("----------------Exception--------------------");
sw1.WriteLine(ex.Message);
sw.Flush();
sw.Close();
fs.Close();
continue;
}
}
}
}
#endregion

#region post
const string sUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
const string sContentType =
"application/x-www-form-urlencoded";
const string sResponseEncoding = "gb2312";
/// <summary>
/// 数据转换类型
/// </summary>
/// <param name="data">要post的数据</param>
/// <param name="url">目标url</param>
/// <returns>服务器响应</returns>
static string PostDataToUrl(string data, string url)
{
Encoding encoding = Encoding.Unicode;
byte[] bytesToPost = encoding.GetBytes(data);
return PostDataToUrl(bytesToPost, url);
}

/// <summary>
/// Post data到url
/// </summary>
/// <param name="data">要post的数据</param>
/// <param name="url">目标url</param>
/// <returns>服务器响应</returns>
static string PostDataToUrl(byte[] data, string url)
{
WebRequest webRequest = WebRequest.Create(url);
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
throw new ApplicationException(
string.Format("Invalid url string: {0}", url)
);
}

httpRequest.UserAgent = sUserAgent;
httpRequest.ContentType = sContentType;
httpRequest.Method = "POST";
httpRequest.Timeout = 5000;
httpRequest.ContentLength = data.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();

// Stream responseStream;
string stringResponse = string.Empty;
try
{
//解析服务器返回状态信息
//responseStream = httpRequest.GetResponse().GetResponseStream();

// using (StreamReader responseReader =
// new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))
// {
// stringResponse = responseReader.ReadToEnd();
// }
//responseStream.Close();
HttpWebResponse cnblogsRespone = (HttpWebResponse)httpRequest.GetResponse();
stringResponse = cnblogsRespone.StatusCode.ToString();
}
catch
{

}
return stringResponse;
}
#endregion



}
}
...全文
评论 9
收藏 已收藏
分享
返回顶部
西瓜爱吃橘子
C# 111,128 成员 642,536 内容