我正在尝试将数组作为参数传递给我的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?我做错了什么或使用服务名称不支持?
答案 0 :(得分:0)
您可以尝试/检查一些事项:
答案 1 :(得分:0)
一个hack解决方案可能是使用某种分隔符将您的数组作为单个字符串连接,并传递它而不是数组。然后在服务中,将字符串拆分回数组。它似乎工作,但我真的想要正确的解决方案。如果有人能解决这个问题,请发帖!