SoapSuds工具的一些不足之处
2004-10-08 02:52
309 查看
Some shortcomings of SoapSuds tool
SoapSuds是.Net Framework提供的一个很有用的工具,用来在生成Remote Objects或Web Services的元数据(metadata),供Client端引用。但是,SoapSuds也存在一些不足之处,在使用过程应加以注意,然后通过一些措施进行解决。
1,不能提取非缺省构造函数(nondefault constructor)的元数据,如果Remote Objects的构造函数有传入参数,SoapSuds不能够提取这部分的元数据。
解决措施:使用SoapSuds提取Remote Objects元数据的源代码,手工修改/添加这部分的元数据,然后在Client端引用。(怎么改源代码?我还没有试过。)
SoapSups –url:<URL> -nowp –gc
SoapSups –ia:<Assembly> - nowp –gc
2,如果Remote Objects引用[Serializable] Class,那么通过SoapSuds则不能正确提取Remote Objects的元数据。
问题如下:通过SoapSuds 对Remote Objects提出的元数据不仅包括Remote Object本身,而且还有[Serializable] Class的元数据信息。(This is because SoapSuds generates metadata-only assemblies for all classes and assemblies that are referenced by your server.)如下图所示:
(有人可能会想,这样不是很好吗?直接给Client端这个DLL文件就可以了,[Serializable] Class的Shared Assembly都不需要提供给Client端了。)
但是,这里[Serializable] Class的元数据,提取的元数据中只包括类的成员变量,不包含方法。
如果感兴趣,可以分析SoapSuds生成的源代码或者Assembly(ILDASM工具),看上述观点是否正确。(我测试过,确实是这样的!)
如果同时在Client端引用[Serializable] Class的Shared Assembly和SoapSuds生成的Assembly,会出现Namespace冲突等异常。
如果在Client端只引用SoapSuds生成的Assembly,那问题是[Serializable] Class的元数据有问题呀。
解决措施:
(1)使用SoapSuds提取Remote Objects元数据的源代码,现在你打开生成的源代码,发现没有[Serializable] Class的元数据。(呵呵,这正是需要的)将这个源代码生成Assembly或者直接供Client端调用均可。
(2)同时在Client端引用[Serializable] Class的Shared Assembly。
这样,Client端需要引用两个文件。
Reference:
1. Ingo Rammer, Advanced .Net Remoting
2. MSDN
SoapSuds是.Net Framework提供的一个很有用的工具,用来在生成Remote Objects或Web Services的元数据(metadata),供Client端引用。但是,SoapSuds也存在一些不足之处,在使用过程应加以注意,然后通过一些措施进行解决。
1,不能提取非缺省构造函数(nondefault constructor)的元数据,如果Remote Objects的构造函数有传入参数,SoapSuds不能够提取这部分的元数据。
解决措施:使用SoapSuds提取Remote Objects元数据的源代码,手工修改/添加这部分的元数据,然后在Client端引用。(怎么改源代码?我还没有试过。)
SoapSups –url:<URL> -nowp –gc
SoapSups –ia:<Assembly> - nowp –gc
2,如果Remote Objects引用[Serializable] Class,那么通过SoapSuds则不能正确提取Remote Objects的元数据。
问题如下:通过SoapSuds 对Remote Objects提出的元数据不仅包括Remote Object本身,而且还有[Serializable] Class的元数据信息。(This is because SoapSuds generates metadata-only assemblies for all classes and assemblies that are referenced by your server.)如下图所示:
(有人可能会想,这样不是很好吗?直接给Client端这个DLL文件就可以了,[Serializable] Class的Shared Assembly都不需要提供给Client端了。)
但是,这里[Serializable] Class的元数据,提取的元数据中只包括类的成员变量,不包含方法。
如果感兴趣,可以分析SoapSuds生成的源代码或者Assembly(ILDASM工具),看上述观点是否正确。(我测试过,确实是这样的!)
如果同时在Client端引用[Serializable] Class的Shared Assembly和SoapSuds生成的Assembly,会出现Namespace冲突等异常。
如果在Client端只引用SoapSuds生成的Assembly,那问题是[Serializable] Class的元数据有问题呀。
解决措施:
(1)使用SoapSuds提取Remote Objects元数据的源代码,现在你打开生成的源代码,发现没有[Serializable] Class的元数据。(呵呵,这正是需要的)将这个源代码生成Assembly或者直接供Client端调用均可。
(2)同时在Client端引用[Serializable] Class的Shared Assembly。
这样,Client端需要引用两个文件。
Reference:
1. Ingo Rammer, Advanced .Net Remoting
2. MSDN
相关文章推荐
- GMail Drive shell
- 一首歌词送朋友
- ACM快开始了
- 为一家公司招收.net高级程序员而出得一套卷子
- 12点已过, 2004年的"10.1"长假告一段落
- Another National Day Holiday past...
- 几个开源项目实体层实现方式比较
- 异步调用远程对象(Remote Objects)
- ready for job
- 2004 Sitepoint community awards
- 八个字节的 UDP 如何传输数据
- 10.7
- 觉主的一天
- 痴男怨女
- 我的苦恼,各位给分析分析啊!!!
- 今日终于决定装eclipse3.0.1
- 上海照的
- 041007长假的最后一天。
- 中国程序员的困境与突破—请为自己准备一双跑鞋
- 十一总结