将数组参数从Excel VBA传递到WCF服务

时间:2010-04-28 12:10:02

标签: wcf arrays excel

我正在尝试将数组作为参数传递给我的WCF服务。为了使用Damian的示例代码对此进行测试,我修改了GetData,尝试传递一个int数组而不是一个int作为参数:

using System;
using System.ServiceModel;

namespace WcfService1
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetData(int[] value);
    }
}

using System;
namespace WcfService1
{
    public class Service1 : IService1
    {
        public string GetData(int[] value)
        {
            return string.Format("You entered: {0}", value[0]);
        }
    }
}

Excel VBA代码:

Dim addr As String
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"","
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"","
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/"","
addr = addr + "binding=""NetTcpBinding_IService1"", bindingNamespace=""http://tempuri.org/"""

Dim service1 As Object
Set service1 = GetObject(addr)

Dim Sectors( 0 to 2 ) as Integer
Sectors(0) = 10
Sectors(1) = 20

MsgBox service1.GetData(Sectors)

此代码适用于WCF测试客户端,但是当我尝试从Excel使用它时,我遇到了这个问题。当Excel进入service1.GetData调用时,它会报告以下错误:

>Run-time error '-2147467261 (80004003)'
>
>Automation error
>Invalid Pointer

看起来接口规范和VBA调用之间存在一些不兼容性。

您是否曾尝试将数组从VBA传递到WCF?我做错了什么或使用服务名称不支持?

2 个答案:

答案 0 :(得分:0)

您可以尝试/检查一些事项:

  1. 从您的代码中,看起来只有数组中的第一个元素设置为值,请尝试将它们全部设置。
  2. 尝试传递包含单个属性(int数组)的对象,而不是传递int数组。

答案 1 :(得分:0)

一个hack解决方案可能是使用某种分隔符将您的数组作为单个字符串连接,并传递它而不是数组。然后在服务中,将字符串拆分回数组。它似乎工作,但我真的想要正确的解决方案。如果有人能解决这个问题,请发帖!