服务参考和列表/数组类型

时间:2009-05-05 19:07:12

标签: c# .net asp.net

我有一个问题,我真的需要以任何方式解决(更改数据类型是一个选项)

假设:

  1. 程序和服务均在VS2008中完成
  2. 我完全控制程序和服务
  3. 我有一个程序将“信息列表”传递给服务参考
  4. 示例:

    计划摘要:

    IList<string> XMLList = null;
    XMLList = new List<string>();
    
    // fill my list up here...  mostly just an "array" of xml-based strings
    
    string[] arrayToSend = new string[XMLList.Count];
    arrayToSend = XMLList.ToArray<string>();
    
    string results = DataFeedService.ProcessXMLBatch(arrayToSend);
    

    服务代码段:

    [WebMethod]
    public string ProcessXMLBatch(string[] XMLBatch)
    {
           // process the xml here...
           return "done";
    }
    

    问题: 它不认为我在服务中创建的字符串[]是同一种类型 字符串数组。它将它转换为#namename的类型。#servicename.ArrayOfString

    此代码目前无法编译。我已经四处寻找传递列表或通用的替代方法,并且我一直在遇到障碍。

2 个答案:

答案 0 :(得分:1)

考虑更改您的代码以使用List<string>而不是IList<string>(我知道您实际使用的是这些,但是声明您的变量)。 List<T>类提供了一个明确的ToArray()函数,该函数比您在代码中使用的Enumerable.ToArray<T>扩展方法更快。 可能也可以解决您的问题,但我不确定。

此外,您不需要

string[] arrayToSend = new string[XMLList.Count];

将其声明为

string[] arrayToSend;

您已经使用ToArray()电话进行了分配;不需要事先创建另一个。

编辑为什么不实例化并填充在服务引用名称空间中创建的ArrayOfString类?它将像List<string>一样工作(事实上,我相信它继承了它)。将此作为XMLList的类型,只需将XMLList变量直接发送到该函数。

答案 1 :(得分:0)

如果您将WebMethod更改为接受List<string>而不是string[]并传递相应的类型,则应该有效。根据我的经验,ASP.NET服务似乎更喜欢这个。

此外,请不要忘记确保您的服务引用是最新的,以便正确创建服务包装类型,以便您的代码与之交互。

更新

您是否尝试过实际创建ArrayOfString类型并填充它,而不是在调用WebMethod时使用string[]