Foxtable(狐表)用户栏目专家坐堂 → HttpRequest事件不够稳定


  共有1682人关注过本帖树形打印复制链接

主题:HttpRequest事件不够稳定

帅哥哟,离线,有人找我吗?
lgzhao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
HttpRequest事件不够稳定  发帖心情 Post By:2023/4/28 6:18:00 [显示全部帖子]

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.()













 回到顶部
帅哥哟,离线,有人找我吗?
lgzhao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2023/4/28 10:54:00 [显示全部帖子]

帖子代码局部被吃了


request.accept = "application/json"  改为 request.c/////contenttype = "application/json"  则不再抛出异常。

我知道怎么绕过这个问题,但核心问题是Foxtable的服务端得能处理异常请求不能自己抛异常。因为部署之后什么乱七八糟的请求都会有。

 回到顶部
帅哥哟,离线,有人找我吗?
lgzhao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2023/4/28 10:58:00 [显示全部帖子]

另外,foxtable自带的httpclient对象似乎缺少了contentlength或者contenttype属性,发送的请求会被一些系统的API拒绝。
逼得我用底层请求的,很麻烦。这个最好也改进一下。

最好升级一下netframework, 太太太旧了, httpwebrequest类很难用。 

 回到顶部
帅哥哟,离线,有人找我吗?
lgzhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2023/4/28 14:39:00 [显示全部帖子]

netframework暂时无法升级?

你们支持XP这么多年也算仁至义尽了啊。
再时间长了XP用户不是更没动力升级了吗?
那你们还怎么卖钱? 

这两年Foxtable明显发展变缓慢,可能跟资金不足也有关吧。
再不跟上形式,再过些年就被彻底淘汰了。

不支持最新的用户需求,难道指望现在还趴在XP上的用户给你们带来发展吗?

 回到顶部