谢涛

Results 135 comments of 谢涛

Z39.50 站点数据库,dp2Capo 实现 Z39.50 检索的功能也需要它。这样可以令 dp2Capo 检索功能简单,检索请求里面直接引用站点数据库中的站点 ID 即可,dp2Capo 本身一定是具备访问 Internet 能力的,它可以主动用这个 ID 去获得站点的详细配置信息。 dp2Catalog 可以增强功能,用上述站点数据库来作为配置服务器参数时候的数据源,简化用户配置常用 Z39.50 服务器的操作,从而大大降低使用门槛。(配置 Z39.50 服务器参数是小白用户使用中的一个主要难点)

# 站点数据库的一些细节 1) 记录要有站点名字段。这是一个中文的名称字段,会被用来检索,显示在界面上,非常重要。在记录保存的时候,要检查数据库中所有记录,确保这个名称不会重复。 == **renyh回复:好的,增加站点中文名称字段,不重复。目前创建索引的有站点地址,这个中文名称也创建索引。** 2) 记录要有 ID 字段。每个记录有个唯一性的 ID,可用 GUID 规则发生。当前端下载了一个站点记录,后来需要再次检查服务器上这个记录是否有变化的时候,要用这个 ID 字段来进行检索。为什么不用“站点名”字段承担这个连接的功能?因为站点名可能会改名,但这个 ID 字段一旦建立以后永远不会修改的。 == **renyh回复:id是用GUID,还是用mongodb自带的ObjectID类型,我觉得直接使用用自带的ObjectID就可以了。** 3) 要有一个 URL 字段,指向提供 Z39.50 配置信息的页面。例如国会图书馆的 Z39.50 服务器配置参数页面。 == **renyh回复:好的,已增加此字段** 4)...

## 测试计划 ### 通讯包发送接收 1) 要制造一种场景,前端发出的通讯包,故意切割为几个部分,顺次间隔一定时间发出。目的是验证服务器接收这种碎片通讯包可以正确组合处理; 2) 多个请求一次性发出。那么响应会是和请求包的顺序对应的。目的是测试验证服务器可以处理此种 Pipeline 请求,通讯包分界机制正确。 3) 请求包尺寸大于 4096 bytes,会引起默认配置情况下 TCP 通讯被服务器切断。这是服务器的一种保护措施,防范前端用巨大的通讯包进行攻击。(注意检查这个极限尺寸参数应该可以在 dp2Installer 中配置) 4) 前端使用的通讯包结束符可以是 '\r' 或者 '\n'。服务器会自动按照前端请求时候所使用的结束符,来决定响应包的结束符。注意测试时候,可以同时启动多个通道进行请求,而且请求之间使用了不同的结束符,要求服务器可以自动针对性地使用响应结束符。同一个通道的不同请求之间其实也可以使用不同的结束符,服务器能适应。 **(以上对应测试用例TC-SIP-14)** ### 编码方式 1) 当 SIP Client...

## SIP Server 自动清理休眠 TCP 连接的算法考虑 就是一般 SIP Client 可能会假定 TCP 连接一直存在。如果休眠两分钟以后 SIP Server 自动 Close TCP 连接,那么后面 SIP Client 再次进行请求的时候就会报错 (closed by remote peer),为此,SIP Client 需要有所准备,要专门增加遇到这种情况重试的代码。而且重新 Connect TCP 连接以后,还要补一次...

## 关于 SIP Login 和 ScStatus 请求顺序问题 SIP 2 协议里面规定,如果 SIP Server 要启用 Login 功能,那么 Login 必须是一个 TCP 连接的第一个请求。有一些 SIP Client 实现中,会在 Login 以前先调用 ScStatus,这是不符合 SIP 2 协议规定的。 dp2Capo 中的...

## 实例中 SIP 参数配置的改进 稍早版本中,一个实例的 SIP 参数,只有一组。为了适应一个 dp2library 中多个分馆的场景,最新版本改进为一个实例的 SIP 参数,是一个对照表,由若干 dp2library 用户名各对应一组 SIP 参数。 注意 dp2library 用户名尽量用英文形态。各个分馆的用于 SIP 的 dp2library 用户名最好包含分馆的名字或者标识部分,以方便配置时识别。 对照表中,应该至少有一个用户名事项。如果一个也没有,则实际上这个实例的 SIP 服务无法访问。配置完成时程序会检查并警告这种情况。 一般是有多少个 dp2library 用户可以访问 SIP Service,就给这个对照表配置多少个事项。这样就限定了,配置了的用户才能访问...

@paopaofeng SIP Client 发出带有转义字符串的账户名的 Login 请求包,应该是需要通过专门的 SIP Client 程序来验证。也就是说测试的时候也是要写代码的。这些测试代码形成的功能,最好正规管理和保留,以便可以反复测试。**(对应测试用例TC-SIP-10)**

## Windows Form 程序里面如何实现选择 Z39.50 服务器的对话框? 设想可以用一个对话框内嵌 IE 浏览器控件,控件里面直接显示来自 dp2003.com/webz 的某个选择服务器节点的页面,当选择完成后,点对话框的 OK 按钮,对话框能得到所选的这个服务器节点的 XML 格式的配置数据。 对话框如何得到 IE 控件里面选定节点的数据,这是个技术难点。可以在 HTML 页面里面准备一个具有特定 id 的 hidden input 元素,对话框用操纵 HTML DOM 的方法去搜索和定位这个元素,从而获得数据。也就是说,页面在选择的时候,要负责把 XML 数据放到这个...

# 设计思路 这里记载一些设计思路,供参考。以后稳定下来再改写为 wiki。 ## ZChannel 和 ZClient 这是函数库的两个主要的类。 ZChannel 基本对等于 .NET 的 TcpClient 类型,包装了一下,实现 TCP 通讯。它负责发送和接收 Z39.50 的通讯包。通讯包不是这个类负责构造的,另有类来解决构造通讯包问题,这个类只是负责发送和接收构造好的包。但它在接收包的时候,调用了一个 IsBerComplete() 函数来检查包是否完整到达。 ZClient 实现了 Z39.50 协议的 API,是应用本函数库时候直接使用的类。每个 ZClient 对象包含一个 ZChannel 对象用以实现通讯功能。但...

# 函数介绍 ## ZClient::TryInitialize() 尝试执行 Z39.50 初始化请求 ``` public async Task TryInitialize(TargetInfo targetinfo) ``` 唯一的参数是 TargetInfo 对象。这个结构后面会单独介绍,它存储了一个 Z39.50 服务器的所有配置参数。 所返回的 InitialResult 结构如下: ``` public class InitialResult : Result { //...