2013-03-18 78 views
6

我以ArrayList的形式将数据从Windows窗体发送到Web服务。在我的方法的Web服务的声明是这样的:方法有一些无效的参数?

[WebMethod] 
public int SaveSelectedOffers(ArrayList offers, int selectedRows) 
{ 

} 

,并在Windows窗体,按钮上点击,我的代码是:

private void offersAvailableSubmit_Click(object sender, EventArgs e) 
{ 
    ArrayList options; 
    options.Add("item 1"); 
    options.Add("item 2"); 
    options.Add("item 2"); 
    //In this line of code it is showing error that Argument 1: cannot convert from 'System.Collections.ArrayList' to 'object[]' 
    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
} 
  1. 数据类型的选项是ArrayList和Web服务我也使用ArrayList类型的变量来保存此值,那么为什么会发生此错误?

  2. 将参数发送到Web服务还是有其他方法?

+0

在你的代码中ArrayList选项;应该像ArrayList options = new ArrayList(); – Satpal 2013-03-18 12:01:24

回答

8

Web服务无法通过复杂的类型,如ArrayList,或者至少不是没有一些配置,所以只是简化了您的Web服务。它改成这样:

public int SaveSelectedOffers(object[] offers, int selectedRows) 

这是它是如何产生反正你可以看到,然后调用它像这样:

private void offersAvailableSubmit_Click(object sender, EventArgs e) 
{ 
    object[] options = new object[3]; 
    options[0] = "item 1"; 
    options[1] = "item 2"; 
    options[2] = "item 2"; 

    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
} 

另一种选择为options初始化,如果你正在寻找更简洁的东西,会是这样的:

object[] options = new object[] { "item 1", "item 2", "item 3" }; 
+2

_Very simple_配置:通过进入配置页面并选择通用列表类型意味着与像这样的'瘫痪'相比的快乐世界。 – 2013-03-18 12:00:31

+1

@GrantThomas,就像真的那样,使用原始类型似乎不太实际,以便其他平台更有能力访问您的服务?我想我是这么想的,因为在我的组织中,我们有MF,Java,.NET,C++,PHP,Perl以及任何其他可以跨组织部分操作的平台。 – 2013-03-18 12:02:38

+0

你不是唯一一个'这样想'的人,但你误解了我。这样的配置并不妨碍非.NET客户端的一点:这是一个_client配置_。一些知识将复合想法和进步的情况。 – 2013-03-18 12:03:58

0

我会在你的web方法定义中使用一个类型化的列表或数组。没有混淆可能。数组列表不是强类型的,这意味着直到运行时才能知道内容。

[WebMethod] 
public int SaveSelectedOffers(string[] offers, int selectedRows) 
{ 

} 
4

我会建议你使用

[WebMethod] 
public int SaveSelectedOffers(IList<string> offers, int selectedRows) 
{ 

} 

private void offersAvailableSubmit_Click(object sender, EventArgs e) 
{ 
    IList<string> options = new List<string>(); 
    options.Add("item 1"); 
    options.Add("item 2"); 
    options.Add("item 2"); 

    int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount); 
} 

编辑#1

迈克尔说得好:

Web服务无法通过复杂的类型,如ArrayList中,或者至少不 没有一些配置,所以只需简化您的Web服务即可。迈克尔 -

编辑#2

为了使您的Web服务使用System.Collections.Generic.List

  1. 右键点击服务的服务引用
  2. 配置服务参考
  3. 数据类型组
  4. 将集合类型更改为System.Collections.Generic.List
2

忘记所有这些改变你的代码废话。

如果右键单击“Service References”文件夹中的服务,然后从上下文菜单中选择“Configure Service Reference”,则可以指定客户端应该使用哪种类型进行集合。

对于您的情况,只需从“收集类型”下拉列表中选择System.Collections.ArrayList即可。

但是,您可以指定System.Collections.Generic.List并具有强类型的通用列表。

+0

:)没有注意到有人发布了这个;连接缓慢 :( – Tebo 2013-03-18 12:26:15

相关问题