• 初次使用Atlas JavaScript (Part 2 Web Service扩展)


    Atlas对Web Service两方面的扩展包括:
    1.自动生成javascript代理类的代码
    2.在javascript代理类调用时使用JSON表达式进行数据交换

    通过看Atlas项目的web.config,你可以发现*.asmx现在关联到了一个新的handler,也就是ScriptHandlerFactory,这个handler的行为很简单,如果请求是REST方式则用新的RestHandlerFactory来处理,否则交回给原来的WebServiceHandlerFactory处理。RestHandlerFactory也有一个选择分支,如果请求的是*.asmx/js,那就是请求客户端代理类的代码,使用RestClientProxyHandler处理,否则使用RestHandler处理,下面详细说说它们的原理:

    先看看Web Service的引用,当你在ScriptManager添加一个Service引用的时候,实际添加的是到该*.asmx/js的script引用,然后就得到了代理类的代码,之后你就可以直接在javascript中使用该Web Service的类名称(包括完整的namespace)调用,参数列表则和该Web Service的参数列表一致,最后加上一个参数声明该调用的回调函数。RestClientProxyHandler需要生成如此一个代理类,就需要通过反射扫描所有的Web Services函数签名,然后将函数相关的所有类型注册到客户端。这个注册并不简单,因为Web Service有可能涉及任何类型,包括用户自定义的类型。如果是.NET Framework的一些基础类型,Atlas知道如何将它们转换为对应的javascript对应类;如果是Enum,Atlas也能够自动转换为对应的javascript代码;但遇到了不是基础的struct或者object,Atlas自身就不懂得如何将它们转换为对应的,这时候就要寻找是否有对应的JavaScriptConverter了。

    JavaScriptConverter是处理服务器端和客户端之间对象串行话/并行话的基类。现在用创建一个GuidConverter的目标来举例,首先通过SupportedTypes属性声明自己支持的服务器端类型为Guid吧,再通过GetClientTypeName返回客户端类型的名称为String,这样RestClientProxyHandler就知道生成代理类时Guid类型的参数在客户端对应为String类型。

    接着说说RestHandler,它处理Web Service参数的时候使用的是JSON表达式。和RestClientProxyHandler一样,对于能够处理的类型它自己能够进行串行话/并行话转换,对于不能够处理的参数它寻找对应的JavaScriptConverter帮助。

    继续上面GuidConverter的例子,我们需要实现Serialize和Deserialize这两个函数,将Guid串行话为String仅需要这样:
    return "\"" + ((Guid)o).ToString("D") + "\"" //o是待串行话object
    而将String并行话为Guid则仅需要这样:
    return (new Guid(s.Replace("\"", string.Empty))); //s是待并行话的String的表达式
    最后在web.config的converter节注册一下GuidConverter,Web Service就能够正确的和客户端交换类型为Guid的数据了。

    系统自带的JavaScriptConverter包括DataSetConverter、DataTableConverter、DataRowConverter,注意这3各类都没有实现Deserialize所以仅能用于将数据传送到客户端。

  • 相关阅读:
    MyBatisPartA
    概念:漏洞扫描技术
    概念:防火墙技术
    概念:认证技术与访问控制
    概念:为什么要引进密钥管理技术
    概念:数字签名、传统签名和认证
    概念:简述对称密码算法和公钥密码算法的区别
    概念:单向散列函数部分知识点
    Redis单线程QPS效率高的原因,以及redis6.0升级后的变化
    Mydql数据库缓存池Buffer Pool 冷热数据分离
  • 原文地址:https://www.cnblogs.com/cathsfz/p/536447.html
Copyright © 2020-2023  润新知