将方法参数值类型更改为代理生成中的可空值类型

时间:2013-03-01 20:05:32

标签: c# asp.net web-services serialization svcutil.exe

只是为了说明我的想法。

我必须使用Java服务。有些方法将值类型作为参数,如int, decimal.

我通过svcutil.exe生成了代理,当然它生成了各自类型的方法,但我想将它们生成为nullables ......

而不是decimal,我希望它们是decimal?,你可能会问为什么?

原因是因为Java Service是一个通过JBoss自动生成的服务,它们只是创建一个oracle包并通过Jboss公开它并生成服务。所以有些程序会做这样的事情......

WHERE COLUMN = NVL(PARAM_NOT_MARKED_AS_NULLABLE_IN_SERVICE, COLUMN)
AND COLUMN2 = NVL(ANOTHER_PARAM_NOT_NULLABLE_IN_SERVICE, COLUMN2)

所以如果消费这样的服务

,你必须知道这是不一样的
WSClient.somemethod(0, 0,0);

比这样

WSClient.somemethod(null, null,null);

当最后一个没有时,最后一个会返回一些结果。

我无法更改服务,我无法请求他们更改WSDL的定义,因为它们是自动生成的。他们对Java一无所知,只是pl-sql。

我手动更改了我的自动生成代理以进行测试,如果这个想法可行,并将方法的参数类型更改为nullables,我测试了它,并且,如猜测的那样,它就像一个魅力。

服务不断变化,一些参数被添加,删除,改进等,所以当服务发生变化时,我再次生成代理,只需将其复制并粘贴到我的项目中

我生成这样的服务:

svcutil  /ct:System.Collections.Generic.List`1  http://Myurl?wsdl

我认为如果每次重新生成代理时都必须手动更改每个方法,那将非常痛苦

我愿意使用另一个软件,使用svcutil的特殊命令,使用其他工具,无论如何,但我正在寻找一种方法将方法的值paremeter类型更改为可空类型,我必须注意,只是方法参数不是所有参数,因为一些对象定义,实际上具有可空类型的属性,并且它们可以从原点为空。

我知道我在问一些错误的东西,真正的解决方案应该是服务可以互操作,但正如我所说,我不能这么说。

我不认为手动查找和替换看起来是一种方法并将其更改为“?”应该是最好的主意。

我真的很感激任何帮助。

此致

1 个答案:

答案 0 :(得分:0)

创建一个控制台应用程序,为您执行查找/替换并将其作为构建脚本的一部分运行