以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- HttpRequest事件不够稳定 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186421) |
-- 作者:lgzhao -- 发布时间:2023/4/28 6:18:00 -- HttpRequest事件不够稳定 HttpRequest事件接收到一些不标准的请求的时候,有时候会自己先抛出异常,而不是回复对方的请求有问题。 这个导致自身不稳定 例如: 客户端用这个发送请求 Dim JJ As new jobject JJ("EventCode") = "CustomerAddedOrChanged" JJ("CustomerInfo") = “dfs Jo” \' 发送信息 Dim postData As String = CompressJson(JJ.Tostring) Dim request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create(_WebhookSettings.URLToPostCustomerInfo), System.Net.HttpWebRequest) request.Method = "POST" Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData) request.accept = "application/json" request.ContentLength = byteArray.Length request.Timeout = 3000 \' 3秒 Dim ReoToken As String ="asdfsadfgghfgd" request.Headers.Add("Authorization", ReoToken) \'base64 加密 Dim dataStream As System.IO.Stream = request.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() Dim response As System.Net.HttpWebResponse = CType(request.GetResponse(), System.Net.HttpWebResponse) Dim responseStream As System.IO.Stream = response.GetResponseStream() Dim reader As New System.IO.StreamReader(responseStream, Encoding.UTF8) Dim responseContent As String = reader.ReadToEnd() Dim statusCode = response.StatusCode responseStream.Close() response.Close() \' ********** 这段请求中,可能是缺少了contenttype头部信息吧。服务端总是抛出一个错误,然后才执行httprequest事件。 作为一个服务端应该要准备好接收各种错误请求,而不能因为对方的请求导致自己抛出自己的错误,应该要告诉对方你错了,而不是自乱阵脚。 服务端面对的是各种程序和浏览器的请求,要做得更坚强。 \' ********** 在上面这个请求中,服务端会在httpreques事件之前抛出如下异常信息: Event/function: Object reference not set to an instance of an object. at Foxtable.RequestEventArgs.O.o.0oO.() |
-- 作者:有点蓝 -- 发布时间:2023/4/28 8:46:00 -- 我测试没有问题。做个例子发过来看看 测试循环提交了100次,都没有问题: httprequest事件 Output.Show(e.path) e.WriteString("OK!") 客户端测试 For i As Integer = 0 To 99 Dim JJ As New jobject JJ("EventCode") = "CustomerAddedOrChanged" JJ("CustomerInfo") = "dfs Jo" \' 发送信息 Dim postData As String = CompressJson(JJ.Tostring) Dim request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create("http://192.168.2.6/test"), System.Net.HttpWebRequest) request.Method = "POST" Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData) request.accept = "application/json" request.ContentLength = byteArray.Length request.Timeout = 3000 \' 3秒 Dim ReoToken As String = "asdfsadfgghfgd" request.Headers.Add("Authorization", ReoToken) \'base64 加密 Dim dataStream As System.IO.Stream = request.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() Dim response As System.Net.HttpWebResponse = CType(request.GetResponse(), System.Net.HttpWebResponse) Dim responseStream As System.IO.Stream = response.GetResponseStream() Dim reader As New System.IO.StreamReader(responseStream, Encoding.UTF8) Dim responseContent As String = reader.ReadToEnd() Dim statusCode = response.StatusCode responseStream.Close() response.Close() Output.Show(i & ": " & statusCode) Output.Show(responseContent) Next |
-- 作者:lgzhao -- 发布时间:2023/4/28 10:53:00 -- 我的测试代码是这个样子。服务端是空项目,只是监听8081端口即可。任何事件代码都不需要写。 只要请求发了,服务端就会抛出异常。 服务端程序版本2022-1-30开发版。 如果把 request.accept = "application/json" 改为 request.c 则不再抛出异常。 我知道怎么绕过这个问题,但核心问题是Foxtable的服务端得能处理异常请求不能自己抛异常。因为部署之后什么乱七八糟的请求都会有。 ‘************************* Dim JJ As new jobject JJ("EventCode") = "CustomerAddedOrChanged" JJ("CustomerInfo") = "dfs Jo" \' 发送信息 Dim postData As String = CompressJson(JJ.Tostring) Dim request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create("http://127.0.0.1:8081/test"), System.Net.HttpWebRequest) request.Method = "POST" Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData) request.accept = "application/json" request.ContentLength = byteArray.Length request.Timeout = 3000 \' 3秒 Dim ReoToken As String ="asdfsadfgghfgd" request.Headers.Add("Authorization", ReoToken) \'base64 加密 Dim dataStream As System.IO.Stream = request.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() Dim response As System.Net.HttpWebResponse = CType(request.GetResponse(), System.Net.HttpWebResponse) Dim responseStream As System.IO.Stream = response.GetResponseStream() Dim reader As New System.IO.StreamReader(responseStream, Encoding.UTF8) Dim responseContent As String = reader.ReadToEnd() Dim statusCode = response.StatusCode responseStream.Close() response.Close()
|
-- 作者:lgzhao -- 发布时间:2023/4/28 10:54:00 -- 帖子代码局部被吃了 request.accept = "application/json" 改为 request.c/////contenttype = "application/json" 则不再抛出异常。 我知道怎么绕过这个问题,但核心问题是Foxtable的服务端得能处理异常请求不能自己抛异常。因为部署之后什么乱七八糟的请求都会有。
|
-- 作者:lgzhao -- 发布时间:2023/4/28 10:58:00 -- 另外,foxtable自带的httpclient对象似乎缺少了contentlength或者contenttype属性,发送的请求会被一些系统的API拒绝。 逼得我用底层请求的,很麻烦。这个最好也改进一下。 最好升级一下netframework, 太太太旧了, httpwebrequest类很难用。
|
-- 作者:有点蓝 -- 发布时间:2023/4/28 11:04:00 -- 我把httprequest事件代码全部去掉,测试一样没有问题。 客户端会返回:远程服务器返回错误: (404) 未找到。 如果Foxtable不是最新版的,请更新到最新版
|
-- 作者:有点蓝 -- 发布时间:2023/4/28 11:05:00 -- 以下是引用lgzhao在2023/4/28 10:58:00的发言:
contenttype是有的,contentlength不清楚,我反馈一下 另外,foxtable自带的httpclient对象似乎缺少了contentlength或者contenttype属性,发送的请求会被一些系统的API拒绝。 逼得我用底层请求的,很麻烦。这个最好也改进一下。 最好升级一下netframework, 太太太旧了, httpwebrequest类很难用。
netframework暂时无法升级,因为还有不少用户使用的是XP系统,没有办法抛弃
|
-- 作者:lgzhao -- 发布时间:2023/4/28 14:39:00 -- netframework暂时无法升级? 你们支持XP这么多年也算仁至义尽了啊。 再时间长了XP用户不是更没动力升级了吗? 那你们还怎么卖钱? 这两年Foxtable明显发展变缓慢,可能跟资金不足也有关吧。 再不跟上形式,再过些年就被彻底淘汰了。 不支持最新的用户需求,难道指望现在还趴在XP上的用户给你们带来发展吗?
|
-- 作者:chen37280600 -- 发布时间:2023/4/28 14:42:00 -- 回复:(lgzhao)netframework暂时无法升级?你们支持X... 我突然觉得你说得好有道理,指望xp的给钱,还真是有点奇怪,应该是不断面向未来。xp旧版本的项目,基本也不会升级上去,可以放弃兼容 |