Передача аргумента массива из Excel VBA в службу WCF - PullRequest
1 голос
/ 28 апреля 2010

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

Ответы [ 2 ]

0 голосов
/ 18 июня 2010

Хакерским решением может быть объединение вашего массива в виде одной строки с использованием какого-либо разделителя и передача его вместо массива. Затем в службе разделите строку обратно на массив. Кажется, работает, но я действительно хочу правильное решение. Если кто-то может понять это, пожалуйста, напишите!

0 голосов
/ 29 апреля 2010

Есть несколько вещей, которые вы можете попробовать / проверить:

  1. Из вашего кода похоже, что только первый элемент в вашем массиве имеет значение, попробуйте установить их все.
  2. Вместо передачи массива int попробуйте передать объект, который содержит единственное свойство, которое является массивом int.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...