我正在尝试将类型为List<UploadQueue>
的列表对象传递给WCF SOAP
相同参数类型的方法,我收到错误:
无法转换 'System.Collections.Generic.List' 到'WebAPI.Upload.UploadQueue []'
我不明白这一点因为我的WCF方法(下面)参数类型是List<UploadQueue>
:
IService.DoUpload(List<UploadQueue> request)
以下是调用“DoUpload”的代码,它返回上述错误。
List<UploadQueue> results = new List<UploadQueue>();
HttpPostedFile m_objFile = default(HttpPostedFile);
int m_objFlag = default(int);
Guid m_objGuid = Guid.NewGuid();
DateTime m_objDate = DateTime.Now;
try
{
if (Request.Files.Count > 0)
{
for (var j = 0; i <= (Request.Files.Count - 1); j++)
{
m_objFile = Request.Files[j];
if (!(m_objFile == null | string.IsNullOrEmpty(m_objFile.FileName) | m_objFile.ContentLength < 1))
{
results.Add(new UploadQueue(
m_objGuid,
m_objFlag,
m_objFile.ContentLength,
m_objFile.FileName,
m_objDate)
);
}
}
}
}
catch (Exception ex)
{
//handle error
}
retParam = upload.DoUpload(results);
想法?感谢。
答案 0 :(得分:14)
在您的客户端项目中,您需要右键单击服务引用并选择“配置服务引用”。在配置屏幕上的“数据类型”部分中,您需要将集合类型设置为System.Collections.Generic.List而不是System.Array。
答案 1 :(得分:3)
生成的客户端已替换List with an Array(默认行为)。使用VS.NET 2008,您可以选择使用List生成此代码 - 请查看Configure Service Dialog Box。正如其他人所说,ToArray会起作用。
答案 2 :(得分:1)
尝试做结果.ToArray()。这可能会解决它。
upload.DoUpload(results.ToArray());
问题是soap服务表示它需要一个对象数组,而不是列表。当从WSDL构建代理类时,它会将其转换为满足服务(数组)需求的最基本对象。
答案 3 :(得分:1)
retParam = upload.DoUpload(results.ToArray());
......或类似的。