技工之家

Let's talk about tech

导航

1月2日工作总结

今天本打算是想实践一下将一个XMLElement转化为一个DataSet对象,顺带封装了一个用于提交OAI-PMH请求的类,该类的方法可以返回一个OAIPMHtype的对象。做了一个ASP.NET页面用于调试,不料引出一堆奇怪的问题。同时做了Console和WinForm的用于调试的程序都没有问题,成功地将XMLElement的对象转化成了DataSet对象,用WinForm还可以用DataGrid控件把DataSet的内容显示出来。

今天做的东西分为三层:

1. Common层

这一层是一些公用数据结构的定义,包括OAIPMHtype类的定义和由Dublin Core生成的DataSet的定义。这些类都是用xsd.exe工具从相应的xsd文件生成的。

2. OAI-PMH Client层

这一层有一个OAI_PMHClient类,其有一个GetResponse()方法,接受的参数是BaseUrl和QueryString,返回类型是OAIPMHtype. 这个类完成的工作包括发送HTTP请求和把得到的答复流反串行化为一个OAIPMHtype类型的对象。

3. 用户界面层

做了3个用户界面,分别是网页,控制台,和WinForm. 其中控制台只用来检查OAI-PMH Client的正确性。用WinForm得到了对应于GetRecord的OAIPMHtype对象时,可将其中的XMLElement转化为DataSet,并用DataGrid显示。转化的方法很土,是先把XMLElement写到一个文件里,再用DataSet的ReadXml方法把它读出来。以后可以用上一篇帖子说到的类似于管道的方法。

网页界面比较郁闷。本来一开始做的就是网页,因遇到无法解决的问题才被迫做了控制台和WinForm的界面。问题有两个:

1)从ASP.NET Web Application调用OAI-PMH Client时,Client无法与外部服务器建立连接。从抓包的结果看,没有抓到任何外出的包,即在发起连接之前就被扼杀了。更奇怪的是,这个问题并不总出现,而是一段时间集中有,一段时间集中没有,总的来说有问题的时候比没问题的时候多。

2)从ASP.NET Web Application调用OAI-PMH Client时,当OAI-PMH Client创建一个XmlSerializer对象时出现错误,提示为:

找不到文件或程序集名称“gourf8y6.dll”,或找不到它的一个依赖项。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.FileNotFoundException: 找不到文件或程序集名称“gourf8y6.dll”,或找不到它的一个依赖项。

源错误:

行 27: StreamReader sr = new StreamReader(strm);
行 28:
行 29: XmlSerializer ser = new XmlSerializer(typeof(OAIPMHtype));
行 30: OAIPMHtype oa = new OAIPMHtype();
行 31: oa = (OAIPMHtype) ser.Deserialize(sr);

源文件: d:\proj\ws\oai-pmhclient\oaiclient.cs    行: 29

程序集加载跟踪: 下列信息有助于确定程序集“gourf8y6.dll”无法加载的原因。

=== Pre-bind state information ===
LOG: Where-ref bind. Location = C:\WINNT\TEMP\gourf8y6.dll
LOG: Appbase = file:///c:/inetpub/wwwroot/OAI-PMH
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
===

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/WINNT/TEMP/gourf8y6.dll.

堆栈跟踪:

[FileNotFoundException: 找不到文件或程序集名称“gourf8y6.dll”,或找不到它的一个依赖项。]
   System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Boolean isStringized, Evidence assemblySecurity, Boolean throwOnFileNotFound, Assembly locationHint, StackCrawlMark& stackMark) +0
   System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Boolean stringized, Evidence assemblySecurity, StackCrawlMark& stackMark) +307
   System.Reflection.Assembly.Load(AssemblyName assemblyRef, Evidence assemblySecurity) +21
   System.CodeDom.Compiler.CompilerResults.get_CompiledAssembly()
   System.CodeDom.Compiler.CompilerResults.get_CompiledAssembly()
   System.Xml.Serialization.Compiler.Compile()
   System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings)
   System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlTypeMapping xmlTypeMapping)
   System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
   System.Xml.Serialization.XmlSerializer..ctor(Type type)
   OAI_PMHClient.OAIClient.GetResponse(String baseUrl, String queryString) in d:\proj\ws\oai-pmhclient\oaiclient.cs:29
   OAI_PMH.WebForm1.Button1_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\oai-pmh\webform1.aspx.cs:60
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) System.Web.UI.Page.ProcessRequestMain()

出错信息中提到的找不到的文件的文件名每次都不一样,应该是一个临时生成的文件。这个问题总是出现。

由于对ASP.NET和IIS的机制不甚了解,这两个问题如何解决目前尚无任何头绪。

 

posted on 2005-01-03 01:24  techmania  阅读(905)  评论(3编辑  收藏  举报