Я пытаюсь передать массив в качестве аргумента моей службе WCF. Чтобы проверить это, используя пример кода Дамиана, я изменил 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? Я делаю что-то не так или это не поддерживается с помощью названия службы?