.NET Web服务参数在序列化之前是int [],但是之后的ArrayOfInt?

时间:2012-09-18 18:56:15

标签: c# web-services

我有一个.NET网络服务,我希望接受List<int> fooint[] foo。我已经尝试将paramater声明为每种类型,但在通过序列化程序运行后会转换为ArrayOfInt。

我有另一个不同的Web服务(旧的,移动到新的结构),因此,它不使用System.Runtime.Serialization来生成它的引用。这有一个有益的副作用,即不将int []参数转换为ArrayOfInt。

有趣的是,我的Web服务方法很高兴地返回int []。它只是不接受int []作为参数:

[WebMethod(Description = "Gets a list of Tasks from a list of Order IDs.")]
public List<TaskDto> GetTasksByIDList(int[] idList)
{
    return new List<TaskDto>();
}

[Test]
public void GetTasksByIDList()
{
    Task taskDto = WorkflowServices.CreateInstallTask(OrderID, TaskTemplateID, SiteID, DataCenterID,
                                                         DeviceTemplateID, DeviceName, Username);

    Task secondTaskDto = WorkflowServices.CreateInstallTask(OrderID, TaskTemplateID, SiteID, DataCenterID,
                                             DeviceTemplateID, DeviceName, Username);

    ArrayOfInt idList = new ArrayOfInt{ taskDto.ID, secondTaskDto.ID };

    List<Task> tasks = WorkflowServices.GetTasksByIDList(idList).ToList();

    if (tasks.Count() != idList.Count())
        throw new Exception(string.Format("Failed to find {0} tasks by ID. Received: {1}", idList.Count(), tasks.Count()));
}

关于如何说服我的服务接受int []而不是ArrayOfInt的任何想法?我不希望最终用户必须了解什么/为什么ArrayOfInt集合仅对某些场景而不是其他场景是必需的。

更新

以下是有关此问题的更多信息。首先,我认为正确生成的Web服务的屏幕截图。请注意,WSDL声明指示ArrayOfInt,但它仍然被解释为int []:

enter image description here 现在,相比之下:

enter image description here

这是他们每个Reference.cs文件的顶部。请注意,使用ServiceModel生成“良好”服务引用,但“错误”服务引用不会生成。

namespace CableSolve.Web.Api.Tests.ComponentServicesProxy {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cormant.com/cswebapi", ConfigurationName="ComponentServicesProxy.ComponentServicesSoap")]
public interface ComponentServicesSoap {

namespace CableSolve.Web.Api.Tests.WorkflowServicesProxy {
    using System.Runtime.Serialization;
    using System;
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="Order", Namespace="http://www.cormant.com/cswebapi")]
    [System.SerializableAttribute()]

1 个答案:

答案 0 :(得分:0)

我不确定你是否可以像这样直接传递数组并让代码识别它。我已经能够传递包含数组的自定义对象,但没有问题