在ASP.NET下开发访问dp2libraryws的程序,有两种方法实现对dp2libraryws Webservice接口的访问。
第一种方法是,像所有Webservice一样,只要你知道它的WSDL文件,你就可以利用.NET的工具来创建一个proxy程序,这个proxy程序把Webservice接口包装了,你看起来就像调用本地函数一样调用它。在这个方法中,WSDL文件包含了所有的机器需要知道的信息,不再需要任何其他东西的支持。Webservice技术牛就牛在这点,它是一个非常通用和简洁的技术。当然,为了完成开发,可能需要针对具体API的解释性文档,让开发者能够了解API的功能,不过这是给人看得,不是给机器看的。
第二种方法是,采用数字平台公司为dp2libraryws webservice API接口开发的DigitalPlatform.CirculationClient.dll库函数,相当于在上述第一种方法的传统的proxy程序代码上又增加了一层和通讯有关的功能,强调了通讯通道的概念,对多通道和并发访问有完善的处理办法(例如采用Stop类和工具条上的停止按钮很好集成,方便操作者随时中断长操作)。这是目前dp2circulation、dp2catalog等前端所采用的接口库。这个库的好处是,它比较成熟,开发者只需要调用里面的一些接口函数,就可以实现访问dp2libraryws服务器的功能,而不必要去了解许多webservice proxy接口的细节。
第二种方法的缺点是,开发者必须了解DigitalPlatform.CirculationClient.dll库函数的特性思维模式,否则用起来会有些困难。其实,DigitalPlatform.CirculationClient.dll库函数仅仅是访问dp2libraryws的一种途径和方法,不是唯一的方法。
在上次的email通讯中,我回复你的最后一封email里面我问你最近采用的是哪种方法,我知道了后可以提供更有针对性地服务和帮助。然后就一直没有得到你的回复。(我这几天没有去公司,没有收最新的email。)
从你这次提供的代码片段看,出现
using DigitalPlatform.CirculationClient;
这一句话,表明你有挂接使用这个函数库的用意;
而
wsLibrary.Library lib = new wsLibrary.Library();
wsLibrary.Result result = new wsLibrary.Result();
好像又是在调用你自己创建的proxy代码内的东西。
我这里重申一下,两种方法不要混用。
我现在不在公司的开发机器面前,有些代码看不到,我对你描述的情况先进行一些简单分析,其实原因可能是你现在手头的DigitalPlatform.CirculationClient.dll二进制或者源代码旧了,因为几个月过去了,dp2libraryws webservice API发生了不少变化,因而DigitalPlatform.CirculationClient.dll库函数也发生了不少变化,如果你采用了DigitalPlatform.CirculationClient.dll库函数,我回头给你提供最新的库函数版本,问题就会消失。
而如果你采用的是自己的proxy程序,你只需要在VS2005中webservice reference节点那里update刷新一下,重新编译一下代码即可。
如有进一步的问题请继续发帖交流。
在计划中,我们过一段会在网站上提供样例程序的打包下载,在dp2系统的参考手册里也会增加更详细的章节解释。