仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 949|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP.NET 2.0 WebService中传送DataTabl...

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。asp.net|web|参考  在2.0正式版公布之前,就满天的看到关于DataTable撑持序列化的新特征宣扬,满觉得今后今后利用DataTable就和DataSet一样便利了,了局在使用项目标时分才发明并不是那末回事。
  DataTable是撑持序列化了,可是微软并没有把他做的出格便利,还必要我们本人来做一些事情以后才干够在WebService内里传送DataTable,不然在援用DataTable的时分会发明DataTable酿成了一个甚么Proxy范例。
  起首编写类DataTableSchemaImporterExtension,代码以下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Xml.Serialization.Advanced;
usingSystem.Collections;
usingSystem.Xml.Schema;
usingSystem.Xml.Serialization;
usingSystem.CodeDom;
usingSystem.CodeDom.Compiler;
usingSystem.Xml;
usingSystem.Data;
namespaceXrinehart.Tools.WebService.SchemaImporter
{
classDataTableSchemaImporterExtension:SchemaImporterExtension
{
//DataTableSchemaImporterExtensionisusedforWebServices,itisusedtorecognizetheschemaforDataTablewithinwsdl
HashtableimportedTypes=newHashtable();
publicoverridestringImportSchemaType(stringname,stringschemaNamespace,XmlSchemaObjectcontext,XmlSchemasschemas,XmlSchemaImporterimporter,CodeCompileUnitcompileUnit,CodeNamespacemainNamespace,CodeGenerationOptionsoptions,CodeDomProvidercodeProvider)
{
IListvalues=schemas.GetSchemas(schemaNamespace);
if(values.Count!=1)
{
returnnull;
}
XmlSchemaschema=values[0]asXmlSchema;
if(schema==null)
returnnull;
XmlSchemaTypetype=(XmlSchemaType)schema.SchemaTypes[newXmlQualifiedName(name,schemaNamespace)];
returnImportSchemaType(type,context,schemas,importer,compileUnit,mainNamespace,options,codeProvider);
}
publicoverridestringImportSchemaType(XmlSchemaTypetype,XmlSchemaObjectcontext,XmlSchemasschemas,XmlSchemaImporterimporter,CodeCompileUnitcompileUnit,CodeNamespacemainNamespace,CodeGenerationOptionsoptions,CodeDomProvidercodeProvider)
{
if(type==null)
{
returnnull;
}
if(importedTypes[type]!=null)
{
mainNamespace.Imports.Add(newCodeNamespaceImport(typeof(DataSet).Namespace));
compileUnit.ReferencedAssemblies.Add("System.Data.dll");
return(string)importedTypes[type];
}
if(!(contextisXmlSchemaElement))
returnnull;
if(typeisXmlSchemaComplexType)
{
XmlSchemaComplexTypect=(XmlSchemaComplexType)type;
if(ct.ParticleisXmlSchemaSequence)
{
XmlSchemaObjectCollectionitems=((XmlSchemaSequence)ct.Particle).Items;
if(items.Count==2&&items[0]isXmlSchemaAny&&items[1]isXmlSchemaAny)
{
XmlSchemaAnyany0=(XmlSchemaAny)items[0];
XmlSchemaAnyany1=(XmlSchemaAny)items[1];
if(any0.Namespace==XmlSchema.Namespace&&any1.Namespace=="urn:schemas-microsoft-com:xml-diffgram-v1")
{
stringtypeName=typeof(DataTable).FullName;
importedTypes.Add(type,typeName);
mainNamespace.Imports.Add(newCodeNamespaceImport(typeof(DataTable).Namespace));
compileUnit.ReferencedAssemblies.Add("System.Data.dll");
returntypeName;
}
}
}
}
returnnull;
}
}

}
  为此类增加进一个项目中,并将此项目举行强定名后编译。
  然后,把该Assembly程序集到场到GAC中。
  最初修正本机的machine.config,代码以下:
<sectionGroupname="system.xml.serialization"type="System.Xml.Serialization.Configuration.SerializationSectionGroup,System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089">
<sectionname="schemaImporterExtensions"type="System.Xml.Serialization.Configuration.SchemaImporterExtensionsSection,System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
<sectionname="dateTimeSerialization"type="System.Xml.Serialization.Configuration.DateTimeSerializationSection,System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
<sectionname="xmlSerializer"type="System.Xml.Serialization.Configuration.XmlSerializerSection,System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"requirePermission="false"/>
</sectionGroup>
<system.xml.serialization>
<schemaImporterExtensions>
<addname="dataTableSchemaImporterExtension"type="Xrinehart.Tools.WebService.SchemaImporter.DataTableSchemaImporterExtension,Xrinehart.Tools.WebService.SchemaImporter,Version=1.0.0.0,Culture=neutral,PublicKeyToken=5a627ce15fb94702"/>
</schemaImporterExtensions>
</system.xml.serialization>
  完成以上的步骤后,再编译WebService,从头援用(大概更新Web援用),就能够准确的辨认DataTable范例了。
  实在DataTable只完成了序列化,但WebService其实不能本人反序列化为可辨认的格局,以是必要本人手动增添。由此能够衍生为各类营业实体BussinessEntity类工具也能够经由过程以上体例完成间接传送。
  但愿对人人有所匡助。
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。
山那边是海 该用户已被删除
沙发
发表于 2015-1-17 20:30:27 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-21 07:45:33 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
只想知道 该用户已被删除
地板
发表于 2015-1-30 11:43:24 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-6 11:01:25 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
不帅 该用户已被删除
6#
发表于 2015-2-16 00:36:55 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-11 20:48:51 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-19 12:37:22 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
若天明 该用户已被删除
9#
 楼主| 发表于 2015-3-28 01:46:00 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-27 18:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表