Foxtable(狐表)用户栏目专家坐堂 → 1秒内判断内网通还是外网通并且自动设置数据源


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

主题:1秒内判断内网通还是外网通并且自动设置数据源

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
1秒内判断内网通还是外网通并且自动设置数据源  发帖心情 Post By:2015/7/9 10:32:00 [只看该作者]

'解析文件
Dim strs As String = FileSys.ReadAllText("" & ProjectPath & "123.txt")
strs = strs.Replace(vblf,"")
Dim rs() As String = strs.Split(vbcr)
Dim nwzip As String = "" '内网主IP
Dim nwLip As String = "" '内网LOG IP
Dim wwzip As String = "" '外网主IP
Dim wwLip As String = "" '外网LOG IP
If rs.Length >=1 Then
nwzip = DecryptText(rs(0),"Es2%","ty47^.")
End If
If rs.Length >=2 Then
nwLip = DecryptText(rs(1),"Es2%","ty47^.")
End If
If rs.Length >=3 Then
wwzip = DecryptText(rs(2),"Es2%","ty47^.")
End If
If rs.Length >=4 Then
wwLip = DecryptText(rs(3),"Es2%","ty47^.")
End If
'msgbox(nwzip)
'msgbox(nwLip)
'msgbox(wwzip)
'msgbox(wwLip)
msgbox(1)
'内网外网判断
Dim url As String = "http://192.168.1.8:8008/test"  '请按实际升级的路径填写
Dim FTT As String
try
    Dim rqst As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url)
    rqst.TimeOut = 1000 '一秒
    Dim rsps As System.Net.HttpWebResponse = rqst.GetResponse
    Dim stm As System.IO.Stream = rsps.GetResponseStream()
    Dim reader As New System.IO.StreamReader(stm)
    Dim str As String = reader.ReadToEnd
   
    Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=\<BODY\>+.+;+).+(?=\</BODY?\>+)")
    For i As Integer = 0 To mc.count - 1
        'msgbox(mc(i).Value)
        If mc(i).value = "FT" Then
            FTT=mc(i).value
            Exit For
        End If
    Next
    rsps.Close

catch ex As Exception
    'msgbox(ex.message)

End try
If FTT="FT" Then
'msgbox("内网IP通畅")

If e.name = "IBMDMAIN" Then
e.ConnectionString=(nwzip)
End If
If e.name = "IBMDLOGO" Then
e.ConnectionString=(nwLip)
End If

Else
Dim url2 As String = "http://222.241.172.223:8008/test"  '请按实际升级的路径填写
Dim FTT2 As String
try
    Dim rqst2 As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url2)
    rqst2.TimeOut = 1000 '一秒
    Dim rsps2 As System.Net.HttpWebResponse = rqst2.GetResponse
    Dim stm2 As System.IO.Stream = rsps2.GetResponseStream()
    Dim reader2 As New System.IO.StreamReader(stm2)
    Dim str2 As String = reader2.ReadToEnd
   
    Dim mc2 = System.Text.RegularExpressions.Regex.Matches(str2, "(?<=\<BODY\>+.+;+).+(?=\</BODY?\>+)")
    For t As Integer = 0 To mc2.count - 1
        'msgbox(mc(i).Value)
        If mc2(t).value = "FT" Then
            FTT2=mc2(t).value
            Exit For
        End If
    Next
    rsps2.Close
catch ex As Exception
    'msgbox(ex.message)
End try
If FTT2="FT" Then
'msgbox("外网IP通畅")

If e.name = "IBMDMAIN" Then
e.ConnectionString=(wwzip)
End If

If e.name = "IBMDLOGO" Then
e.ConnectionString=(wwLip)

End If
Else
msgbox("网络不通,请联系网络管理员")
End If
End If

 

本方案关键点:

1在服务器制作一个test网页,网页内容为FT两字。 假设该网页能打开就表示服务器能正常使用,该网页能打开,而数据库刚好出现问题不能登陆的可能性比较少就不考虑了。

2在项目目录下制作 一个123.txt的iP地址配置文件。配置连接字符串可使用加密字符串。顺序本例为:内网主连接串,内网LOG连接串,外网主连接串,外网LOG连接串 。

3在路由器上要作8008等端口映射

4以上代码放在 BeforeConnectOuterDataSource 事件中。

 

这样程序在内网使用,就自动使用内网IP,在外见多 使用就自动使用外网IP,无需人工干预。

二连接配置字符串,由管理员制作发,分发给所有人放项目文件夹下面。加密存储,不暴露数据库之关键信息,提高数据安全。

 

遗憾的是没有做出多账套登陆,按此方法如果要作多账套登陆,我想到的办法是另做一个批理,自动改变配置文件123.txt的内容,从而达到开启程序自动登陆指定的数据库系统。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/9 10:35:00 [只看该作者]

 多套账登陆?已经告诉过你思路了,打开项目两次就行。

 

 第一次打开,显示选择窗口;选择以后,重新打开项目;在BeforeConnectOuterDataSource事件设置选择的数据库字符串。


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2015/7/9 10:49:00 [只看该作者]

打开 项目两次的确不想采用。哪有这样的

 

建议官方修正 一下程序

 

目前官方程序是

一打开 就试图连接 程序设计时 设计的数据源

若可连通就直接连,开始登陆了   (此设计思路官方已放弃 多账套功能了)

 

如果不能连通,则系统弹出 数据源连接字符串设计窗口,并且能保存设置。

注意一、这个地方的设置可以修改菜单中显示的数据源字符串了。而在BeforeConnectOuterDataSource中动态改变字符串确改写不了菜单中的数据源设置。

注意二、官方自己提供的数据源连接判断耗时太多,而我们自己写的判断数据源连接与否均可以在1秒内完成,(当然方法不同本一楼的,本一楼是一种替代方法)。官方的当数据源不能连接的判断时间过长,导致出现问题时登陆时间太长。

 

其实官方稍改动一下:

 

程序运行之初,不加载任何数据源,只作必要准备工作。

以最快的速度到达登陆窗口,在登陆窗口允许设置数据源连接字符串,并保存到菜单栏中的字符串中,保证系统一致性。

 

这样可提高登陆效率,可以做出方便的多账套模式。(当前方案如果,后面改变了账套,则前面的加载连接都是没用的耗时而已。

 

希望官方优化一下系统登陆机制,数据库设置机制,直接点。

[此贴子已经被作者于2015/7/9 10:50:16编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/9 10:56:00 [只看该作者]

 打开两次有什么有什么问题,不想重新打开就看动态数据源的例子。

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2015/7/9 11:07:00 [只看该作者]

如何打开两次呢

搞不好就死循环了

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/9 11:13:00 [只看该作者]

传递参数打开

 

Syscmd.Project.Open(ProjectFile,"参数1","参数2")

 

获取参数值

 

OpenFileArgs(0)

OpenFileArgs(1)

 


 回到顶部