C# 在.NET web服务上使用/生成int[]代替ArrayFint的方法签名

C# 在.NET web服务上使用/生成int[]代替ArrayFint的方法签名,c#,.net,asp.net,web-services,service-reference,C#,.net,Asp.net,Web Services,Service Reference,我有一个ASP.NET web服务.asmx,其方法接收int数组int[]和可空int数组int?[]作为参数。我还有一个测试web应用程序,用于通过服务引用使用此web服务 问题是,每当我更改web服务代码中的某些内容,重新编译它并在测试应用程序中更新服务引用时,就会为测试应用程序上的web服务方法生成不同类型的参数。例如: 在第一次生成和服务更新时,Visual Studio在测试应用程序中生成的方法签名为: void MyMethodint[]第一个参数,int?[]第二个参数 然后我做

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

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

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

void MyMethodint[]第一个参数,int?[]第二个参数

然后我做一些改变,再做一次,得到如下结果:

无效MyMethodArrayFint fistParam,ArrayFint1 secondParam

ArrayOfInt与int[]等价,ArrayOfInt1与int?[]等价

再一次,我得到:

无效MyMethodArrayFint1第一个参数,ArrayFint第二个参数

ArrayOfInt和ArrayOfInt1互换后,ArrayOfInt1现在等价于int[],ArrayOfInt等价于int?[]

我真正想要的是使用简单的int[]和int?[]类型,无论我重新编译和更新服务引用多少次!。如何实现这一点?

尝试使用工具生成web服务代理,而不是使用Visual Studio

这是我的工作

尝试使用工具生成web服务代理,而不是使用Visual Studio


这是我的工作

我知道这是老问题,但我刚刚遇到了同样的问题。对我来说,不同之处在于添加了web引用而不是服务引用

在VS中,执行以下操作:

右键单击,选择添加>服务引用 单击左下角的“高级”按钮 单击左下角的添加Web引用按钮 添加URL和引用名称,然后单击添加引用 我的web引用正确地添加了带有int[]参数的方法

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


编辑2:摆脱ArrayOfXXX来列出愚蠢的东西,不使用传统技术,所以对我来说是双赢的。现在,如何在工具中执行此操作?还是只有直接编辑文件才能做到这一点?

我知道这是一个老问题,但我遇到了同样的问题。对我来说,不同之处在于添加了web引用而不是服务引用

在VS中,执行以下操作:

右键单击,选择添加>服务引用 单击左下角的“高级”按钮 单击左下角的添加Web引用按钮 添加URL和引用名称,然后单击添加引用 我的web引用正确地添加了带有int[]参数的方法

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



编辑2:摆脱ArrayOfXXX来列出愚蠢的东西,不使用传统技术,所以对我来说是双赢的。现在,如何在工具中执行此操作?还是只有直接编辑文件才能做到这一点?

没有人找到原因吗?没有人会对这种愚蠢的行为感到恼火吗?你在使用ASP.NET asmx web服务或WCF吗?听起来你应该打开WCF。我在使用ASP.NET,但出于业务原因,我还不能使用WCF。愚蠢,但你可以通过创建自己的集合数组类并在方法中将其用作参数来避免,编译器不会干预的。没人找到原因吗?没有人会对这种愚蠢的行为感到恼火吗?你在使用ASP.NET asmx web服务或WCF吗?听起来你应该打开WCF。我在使用ASP.NET,但出于业务原因,我还不能使用WCF。愚蠢,但你可以通过创建自己的集合数组类并在方法中将其用作参数来避免,那个么编译器就不会干预了。你们凭什么认为这能解决他的问题呢?你有这个问题,然后用wsdl.exe解决了吗?是的,当我使用wsdl.exe时,我可以用int[]代替ArrayFint。它工作得很好,但我正在Visual Studio内部寻找解决方案。如果没有人对此给出解决方案,我会接受这个答案,因为我认为Visual Studio根本无法做到这一点。嗯,我认为Visual Studio内部没有解决方案。。。因此,使用wsdl.exe作为一种变通方法可以很好地工作。谢谢大家的努力!你凭什么认为这能解决他的问题?你有这个问题,然后用wsdl.exe解决了吗?是的,当我使用wsdl.exe时,我可以用int[]代替ArrayFint。它工作得很好,但我正在Visual Studio内部寻找解决方案。如果没有人对此给出解决方案,我会接受这个答案,因为我认为Visual Studio根本无法做到这一点。嗯,我认为Visual Studio内部没有解决方案。。。因此,使用wsdl.exe作为一种变通方法可以很好地工作。谢谢大家的努力!坏主意。尝试在添加服务引用中指定集合的类型。回到使用遗留的te没有什么意义
技术只是将int[]作为参数类型。在我的情况下,它已经是一个ASMX文件,所以不是真正的倒退-没有倒退。OP还谈到它是一个ASMX文件。如果我没有获得WCF的好处,我真的不明白为什么我需要担心它。如果我需要更多,我一开始就不会使用ASMX不,您的服务是ASMX。这不是客户成为ASMX的理由。是的,但我的客户也没有理由成为WCF。我不需要任何东西,除了ASMX提供的,仅仅因为这不是一个很好的理由。我不必担心可能使WCF成为更好的替代方案的任何性能问题,我不担心可能使WCF变得更好的任何安全问题,我没有任何真正的理由认为SOAP在这里不能很好地为我工作。我是一个关注最佳实践的人,但也有机会不为了最佳实践而过度设计——对我来说,这就是其中之一。WCF将使用SOAP。仅供参考,我建议的主要原因是:1、微软对ASMX漏洞和安全修复缺乏支持;2、当你想知道发生了什么时,打开WCF跟踪是很容易的。这只是一个配置更改。坏主意。尝试在添加服务引用中指定集合的类型。回到使用传统技术只是为了获取int[]作为参数类型是没有意义的。在我的情况下,它已经是一个ASMX文件,所以不是真正的倒退-没有回头路可走。OP还谈到它是一个ASMX文件。如果我没有获得WCF的好处,我真的不明白为什么我需要担心它。如果我需要更多,我一开始就不会使用ASMX不,您的服务是ASMX。这不是客户成为ASMX的理由。是的,但我的客户也没有理由成为WCF。我不需要任何东西,除了ASMX提供的,仅仅因为这不是一个很好的理由。我不必担心可能使WCF成为更好的替代方案的任何性能问题,我不担心可能使WCF变得更好的任何安全问题,我没有任何真正的理由认为SOAP在这里不能很好地为我工作。我是一个关注最佳实践的人,但也有机会不为了最佳实践而过度设计——对我来说,这就是其中之一。WCF将使用SOAP。仅供参考,我建议的主要原因是:1、微软对ASMX漏洞和安全修复缺乏支持;2、当你想知道发生了什么时,打开WCF跟踪是很容易的。这只是一个配置更改。