Вызов оболочки оболочки .NET COM из Excel - PullRequest
1 голос
/ 06 октября 2008

Я пытаюсь вызвать веб-сервис из модуля Excel 2003. Я реализовал способ создания библиотеки COM .NET со всеми классами / методами, которые мне нужны. Когда я пытаюсь вызвать метод, который запрашивает веб-сервис из Excel, выполнение просто останавливается на этой строке без каких-либо ошибок. Может быть, это связано со ссылками? Я использую Microsoft.Web.Services2.dll. Я пытался положить его в C: \ WINDOWS \ SYSTEM32 - не повезло

Ответы [ 2 ]

2 голосов
/ 06 октября 2008

Я не уверен, что получу полную картину, но, надеюсь, что-то из этого поможет. Я думаю, у вас есть Excel vba, звонящий в .NET через интерфейс COM, а затем в SOAP веб-SVC.

У вас должна быть установлена ​​правильная PIA , на которую ссылается ваша сборка .NET. Ваш COM-интерфейс должен выглядеть примерно так:



[Guid("123Fooetc...")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IBar
    {
        [DispId(1)]
         void SomeMethod(Excel.Range someRange);
    }

Реализация интерфейса с классом примерно так:


[Guid("345Fooetc..")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MyNameSpace.MyClass")]    
    public class MyClass : IBar
    {
        public void SomeMethod(Excel.Range someRange)
        {...}
    }

Первое, что я хотел бы сделать, это заменить ваш вызов веб-службы на действительно простой метод в вашем .NET-коде, чтобы убедиться, что ваш интерфейс и оболочка взаимодействия работают правильно.

Когда ваш скелет работает правильно, вы можете рассмотреть возможность вызова службы с помощью метода HTTP вместо использования SOAP. Например, вот простой вызов с использованием HTTP GET:


  string resource = yourUrl;
  using (WebClient web = new WebClient())
  {
    web.Credentials = CredentialCache.DefaultCredentials;
    someXml = web.DownloadString(resource);
  }
  return someXml; // or do something interesting with Excel range
1 голос
/ 06 октября 2008

Для решения проблемы я использовал Access вместо Excel. В Access это показывало мне ошибки. Оказалось, что расположение всех эталонных сборок должно быть расположением приложения-вызывающего (в данном случае это был C: \ Program Files \ Microsoft Office \ OFFICE11). Во-вторых, мои прокси-серверы загружали URL-адреса конечной точки из файла .config, который в этом контексте был C: \ Program Files \ Microsoft Office \ OFFICE11 \ MSACCESS.EXE.config

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...