Web数据库应用开发:扩展与数据录入解决方案
立即解锁
发布时间: 2025-08-17 00:51:47 阅读量: 14 订阅数: 28 


WebRAD:使用Visual FoxPro构建Web数据库应用
### Web数据库应用开发:扩展与数据录入解决方案
在Web应用开发中,实现系统的可扩展性和高效的数据录入是至关重要的。以下将详细介绍一些提升系统可扩展性和解决Web数据录入难题的方法。
#### 提升系统可扩展性的策略
1. **在Web服务器上添加实例**
- **原理**:在Web服务器上运行Visual FoxPro应用程序的多个实例,可并行处理多个Web请求。这在多处理器机器上效果显著,在两种情况下也很有帮助:一是当某些请求处理时间较长时,多个实例能让部分用户获得更快响应;二是若数据存储在不同的后端服务器,应用程序在处理查询时会有较长等待时间,此时多实例在单处理器机器上也能发挥作用。
- **操作步骤**:
- **使用COM**:在WC.INI文件中为每个要运行的额外实例添加一行。
- **使用基于文件的消息传递**:启动Visual FoxPro可执行文件的额外实例。一般建议每个处理器运行两个实例,但最佳数量需通过严格的压力测试确定,且系统有重大变更时需重新评估。
- **性能对比**:COM的性能优于基于文件的消息传递,将消息传递机制切换为COM有时能显著提高系统吞吐量。
2. **利用额外的网络机器分担负载**
- **基于文件的消息传递方式**:
- 在一个或多个额外的网络机器(服务器或工作站)上启动应用程序副本。
- 所有机器通过检查Web服务器上的一个公共临时目录来查找新请求。可在INI文件中使用UNC设置或采用通用的网络驱动器映射策略(如始终将W:驱动器映射到Web服务器,然后指向W:驱动器上的临时文件夹)。
- 确保数据路径对所有参与机器都可访问,并设置好权限,使每台机器都能访问运行应用程序所需的所有资源。
- **COM方式**:使用COM进行负载分担需要复杂的设置和管理,不建议普通开发者使用,仅适用于有扎实Windows网络背景的高级开发者。
3. **将数据迁移到不同的后端**
- **好处**:将数据迁移到单独机器上的不同后端(如Microsoft SQL Server),可减轻Web服务器的处理负载,在某些情况下能提高系统吞吐量。同时,由于数据处理活动转移到了不同后端,每个实例的活动水平降低,可增加Web服务器上应用程序实例的数量。
4. **扩展到Web农场**
- **条件**:使用Microsoft Windows 2000 Advanced Server的网络负载平衡(NLB)服务,需要两台或更多使用该服务器的Web服务器,且所有数据(包括会话和日志文件)必须存储在单独的后端机器上。详细策略可参考West Wind Technologies网站上的白皮书:www.west - wind.com/presentations/LoadBalancing/LoadBalancing.htm。
5. **进一步的物理分层分离**
- **策略**:可以创建一个单独的数据访问层,作为COM + 包在单独的服务器上运行;也可以将特殊的、资源密集型的进程拆分为可在其他机器上运行的组件,如信用卡验证、电子邮件服务、维护和会计任务等。
#### Web数据录入的挑战与解决方案
1. **Web数据录入的挑战**
- 与Windows应用程序相比,Web应用程序的数据录入要复杂得多。在Windows应用程序中,使用表单或类设计器添加文本框控件并绑定到数据源,用户输入值后,Visual FoxPro会自动将值存储到相应的控件源。而在手工编码的Web Connection场景中,需要完成一系列额外的任务:
- 创建每个控件的HTML表单元素名称。
- 将表单元素以HTML形式呈现给浏览器,并确保显示当前数据值。
- 编写代码从POST缓冲区读取用户提交的值。
- 将所有提交的值转换回原生数据类型,处理无效值。
- 如果提交有效,将提交的值存储回正确的控件源;如果无效,需要有相应的处理策略,如显示错误消息和/或重新呈现表单进行更正。
以下是一个简单的示例,假设编辑一个文本字段,且已打开包含所需记录的视图:
```foxpro
* 渲染端代码
LOCAL lcStr
lcStr = [<tr><th>Customer Name:</th>] + CRLF
lcStr = m.lcStr + [<td><input name="txtCustomer_Name" type="text" value="] + ;
TRIM( V_Customer.Customer_Name) + [" size=50>] + [</td></tr>] + CRLF
Response.Write( m.lcStr)
* 表单处理端代码
LOCAL lcCustomer_Name
lcCustomer_Name = Request.Form( "txtCustomer_Name")
IF (some validation check)
```
0
0
复制全文
相关推荐





