2010-04-28 5 views
1

WCF 서비스에 대한 인수로 배열을 전달하려고합니다.Excel VBA에서 WCF 서비스에 배열 인수 전달

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]); 
     } 
    } 
} 

엑셀 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) 

이 코드가 작동이 사용 데미안의 샘플 코드를 테스트하기 위해, 나는 그것이 인수로 단일의 int 대신 int 배열을 전달하려고 GetData의 수정 WCF Test Client를 사용해도 좋지만 Excel에서 사용하려고하면이 문제가 발생합니다. Excel에서 service1.GetData 호출에 도달 할 때, 다음과 같은 오류를보고 인터페이스 사양과 VBA 호출 사이에 호환성이 같은

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

것 같습니다.

VBA에서 배열을 WCF로 전달하려고 시도한 적이 있습니까? 잘못되었거나 서비스 모니 커를 사용하여 지원되지 않습니까?

+0

서비스가 다른 operationcontract에서 배열을 생성하고 Excel에서 직접 입력으로 피드를 가져올 수 없다는 점에 주목하십시오. 형식 불일치 오류가 발생합니다. – tbischel

+0

[블로그 기사] (http : //)를 확인하십시오. damianblog.com/2009/07/05/excel-wcf/)을 다시 읽고 '작동하지 않을 때'섹션에서 그가 설명하는 단계를 따르십시오. 그는 Visual Studio 디버거를 Excel에 연결하여 throw되는 .NET Exception에 대한 자세한 정보를 얻을 수있는 방법을 알려줍니다. 어쩌면이 추가 정보로 질문을 업데이트하면 도움이 될 것입니다! – sitnik

답변

0

당신이 체크/시도 할 수 몇 가지가 있습니다 : 사용자 코드에서

  1. 를, 그것은 첫 번째 값으로 설정하여 배열의 요소하려고 그들 모두를 설정하는 것 같습니다.
  2. int 배열을 전달하는 대신 int 배열 인 단일 속성을 포함하는 개체를 전달하십시오.
0

해킹 솔루션은 특정 종류의 구분 기호를 사용하여 배열을 단일 문자열로 결합하고 배열 대신 전달할 수 있습니다. 그런 다음 서비스에서 문자열을 배열로 다시 분할합니다. 그것은 작동하는 것,하지만 난 정말 올바른 해결책을 원한다. 누구나 알아낼 수 있다면 게시하십시오!