在HttpClient的异步编程里,写了
“我们并不能简单地将HttpRequest事件中的代码转移到自定义函数中,然后在HttpRequest事件中用异步方式调用此函数就完事,因为默认主线程执行完毕,系统就会关闭和客户端的信道,客户端不会显示任何内容,同时因为信道已经关闭,异步函数向客户端发送信息的时候会出错”
Dim e As RequestEventArgs = args(0)
'生成网页
'...
'发送网页
e.Handled = True '通知系统异步函数执行完毕,可以关闭信道
我现在在定时器里增加一个每天晚上8点HttpClient发送json推送到用户的企业微信里,但是会发现出错,如果单纯执行代码就没错,但是在定制器8点的时候,会收到报错。好像是什么通讯突然中断,已关闭之类的 。我敢肯定是定制器里执行的代码报错。因为太准时了,8点0分0秒。连续测试过2天,都会这样!
1定时器里TimeTick的代码
Dim tc As WinForm.TextBox = e.Form.Controls("TextBox_CorpID")
If tc.Value <> "" Then
static d1 As Date = Date.today.AddDays(-1)
If d1 <> Date.today AndAlso Date.Now.Hour = 19 AndAlso Date.Now.Minute = 0 Then
d1 = Date.today
Functions.Execute("AutoSendWhour")
End If
End If
2自定义函数“AutoSendWhour”的代码:
Dim ur As String = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}"
Dim hc As new HttpClient(Cexp(ur,Functions.Execute("Web_GetQYAccessToken")))
Dim drs As List(of DataRow)= DataTables("MHuserInfo").SQLSe lect("WXUserID is not null and MHUserName in (se lect distinct WhourApproveUser from WhourInfo where WhourStatus =1)")
For Each dr As DataRow In drs
Dim jo As New JObject
Dim ja As New JArray
Dim s As String = dr("WxUserID")
jo("touser") = s
jo("msgtype") = "news"
Dim tb_AgentID As WinForm.TextBox = Forms("Mainform").Controls("TextBox_AgentID")
s = tb_AgentID.Value
jo("agentid") = s
For i As Integer = 1 To 1 '可以一次发送最多8个图文消息,这里只发送了1个
Dim ao As New JObject()
Dim su As Integer = DataTables("WHourInfo").SQLCompute("Count(*)","WHourApproveUser ='" & dr("MHUserName") & "' And WhourStatus =1")
s = "您有" & su & "条的工时申报未审核"
ao("title") = s '标题
ao("description") = "请及时审核工时申报,提高大家积极性" '描述
Dim tb_http As WinForm.TextBox = Forms("Mainform").Controls("TextBox_Http")
s = "http://" & tb_http.Value & "/WhourList.htm" '连接
ao("url") =s
ao("picurl") = "http://foxupdate.mbldt.com/MH13ServerUpdate/approve.jpg" '图片
ja.Add(ao)
Next
jo("news") = New JObject()
jo("news")("articles") = ja
hc.Content = jo.ToString()
jo = JObject.Parse(hc.GetData)
Next
是不是TimeTick执行的关于httpclient事件里,也要添加e.handle =true ,防止信道关闭?
[此贴子已经被作者于2018/10/30 10:04:56编辑过]