2010-06-03 9 views
0

Я пытаюсь подключить excel к сервису WCF, но я не могу получить даже тривиальный случай для работы ... Я получаю ошибку Invalid Syntax когда я пытаюсь создать прокси-сервер в excel. Я приложил отладчик визуальной студии, чтобы преуспеть, и получим, что реальная ошибка «интерфейс не найден». Я знаю, что сервис работает, потому что тестовый клиент, созданный визуальной студией, в порядке ... поэтому проблема заключается в строке прошивки VBA.«интерфейс не найден» в WCF Moniker без регистрации для excel

Я надеюсь найти одну из двух вещей:

1) поправки к моему прозвищу строке, которая будет делать эту работу, или

2) существующий пример проект для загрузки, который имеет источник как для хоста, так и для клиента, который работает.

Вот код для моего клиента 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""" 

MsgBox (addr) 

Dim service1 As Object 
Set service1 = GetObject(addr) 

MsgBox service1.Test(12) 

У меня есть следующие услуги:

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

public class Service1 : IService1 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 
} 

Он имеет следующий конфигурационный файл:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="WcfService1.Service1Behavior" 
     name="WcfService1.Service1"> 
     <endpoint address="" binding="netTcpBinding" bindingConfiguration="" 
      contract="WcfService1.IService1"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:7891/Test/WcfService1/Service1/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WcfService1.Service1Behavior"> 
      <serviceMetadata httpGetEnabled="false" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 

Редактировать:

Обновленный кличка, который работал для меня следующим образом

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/""" 
+0

Такая же ошибка также возникает, когда служба WCF предоставляет методы с не примитивными типами в качестве параметров или возвращаемых типов. – ssgonell

ответ

0

Я смог исправить это, добавив некоторые цитаты в некоторые ключевые местоположения в строке прокрутки ... К сожалению, прикрепление отладчика к Excel дает вам меньше полезной обратной связи, поэтому исправление это упражнение в угадывании и проверке. В VBA вам нужна двойная кавычка («») вокруг каждой строки в прозвище. Кроме того, термин «mex» в mex-адресе должен быть капитализирован, хотя я указал адрес в контракте как строчный. Идите фигуру.

+1

Не возражаете ли вы обновить/отредактировать свое оригинальное сообщение, чтобы отразить изменения, которые вы сделали для вас? Я испытываю ту же проблему и пробовал вещи, которые вы изменили. –

+1

обновил сообщение с изменениями, которые я сделал. – tbischel

0

Я хотел бы создать клиента как объект .NET, зарегистрировать его как COM-объект и получить доступ к нему с помощью VBA COM

UPDATE: Я нашел эту статью: http://msdn.microsoft.com/en-us/library/ms752245.aspx

Это кажется, что использовать прозвище вы должны сгенерировать клиент, а затем зарегистрировать его с COM, а затем использовать его GUID в качестве типа, а не типа, как у вас есть

+0

, в то время как это еще один способ сделать соединение, точка пытается научиться делать это способом WCF ... но получить базовый уровень для работы – tbischel

+0

Я использую контракт обмена метаданными. Я уже работаю над статьей, которую вы уже связали ... обратите внимание на раздел «Контракт обмена метаданными». – tbischel

 Смежные вопросы

  • Нет связанных вопросов^_^