2

我有一个 ASP.NET Web 服务 ( .asmx),其方法接收int数组 ( int[]) 和可空int数组 ( int?[]) 作为参数。我还有一个测试 Web 应用程序,用于通过服务参考使用此 Web 服务。

问题是每次我更改 Web 服务代码中的某些内容、重新编译它并更新测试应用程序中的服务引用时,都会为测试应用程序上的 Web 服务方法生成不同类型的参数。例如:

在第一次构建和服务更新时,Visual Studio 在测试应用中生成的方法签名是:

void MyMethod(int[] firstParam, int?[] secondParam).

然后我做了一些改变,再做一次,得到类似的东西:

void MyMethod(ArrayOfInt fistParam, ArrayOfInt1 secondParam)

ArrayOfInt等价于int[]ArrayOfInt1等价于int?[])。

再一次,我得到:

void MyMethod(ArrayOfInt1 firstParam, ArrayOfInt secondParam),

withArrayOfIntArrayOfInt1swaped (ArrayOfInt1现在等同于int[]ArrayOfInt等同于int?[])。



我真正想要的是使用简单int[]int?[]类型(无论我重新编译和更新服务引用多少次!)。我怎样才能做到这一点?

4

2 回答 2

0

尝试使用wsdl.exe工具生成 Web 服务代理,而不是使用 Visual Studio。

这对我有用!

于 2011-11-28T17:24:01.313 回答
0

我知道这很旧,但我只是遇到了同样的问题。对我而言,不同之处在于添加了 Web 引用而不是服务引用。

在 VS 中,执行以下操作:

  1. 右键单击,选择添加 > 服务引用
  2. 点击左下角的高级按钮
  3. 单击左下角的Add Web Reference按钮
  4. 添加 URL 和参考名称,然后单击添加参考

我的网络参考正确添加了带int[]参数的方法。

编辑: 是一个更好的答案,用漂亮的图片来说明!

编辑2: 这个答案摆脱了ArrayOfXXX愚蠢List<XXX>并且使用传统技术,因此就我而言是双赢的。现在,如何在工具中做到这一点?还是只能通过直接编辑文件来完成?

于 2014-11-21T20:56:23.717 回答