Клиент WCF VSTO не может найти конечную точку по умолчанию при развертывании на win2k8

Я создал и развернул клиент WCF (запущенный из надстройки VSTO Word) на сервере терминалов Win2008R2. При выполнении конструктор по умолчанию прокси-сервера WCF выдает InvalidOperationException, заявляя, что конечная точка по умолчанию для контракта не может быть найдена.

Тот же клиент WCF при развертывании на машине Win7 x64 просто работает нормально, используя тот же файл .dll.config.

Я попытался создать экземпляр внутри PowerShell и получил ту же ошибку.

При создании выделенной конечной точки в PowerShell я могу выполнить метод службы:

$binding = New-Object System.ServiceModel.BasicHttpBinding
$endpoint = New-Object System.ServiceModel.EndPointAddress("http://myserver:7777/CompanyService.svc")
$client = New-Object MyClient.CompanyServiceReference.CompanyServiceClient($binding, $endpoint)
$v = $client.Version()

Служба Web.config (часть)

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name="NoHttpSecurity" sendTimeout="00:03:00">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <services>
        <service name="CompanyService">
            <endpoint address="http://myserver:7777/mex" contract="IMetadataExchange" binding="mexHttpBinding" />
            <endpoint name="Version" address="http://myserver:7777/Version" contract="MyService.ICompanyService" binding="basicHttpBinding" bindingConfiguration="NoHttpSecurity" />
            <endpoint name="CompanyList" address="http://myserver:7777/CompanyList" contract="MyService.ICompanyService" binding="basicHttpBinding" bindingConfiguration="NoHttpSecurity" />
        </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

MyClient.dll.config (часть)

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_ICompanyService" closeTimeout="00:01:00">
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://myserver:7777/CompanyService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICompanyService"
         contract="CompanyServiceReference.ICompanyService" name="BasicHttpBinding_ICompanyService" />
    </client>
</system.serviceModel>

ОБНОВЛЕНИЕ

Я «исправил» это, скопировав файл Client.config в папку программы Office и переименовав его в WINWORD.EXE.config.


person Filburt    schedule 24.05.2011    source источник
comment
Возможно, дубликат stackoverflow.com/questions/2192970/   -  person Roy Dictus    schedule 24.05.2011
comment
@Roy: На самом деле это не дубликат, так как я могу подтвердить, что рабочая конфигурация существует.   -  person Filburt    schedule 24.05.2011
comment
Вы когда-нибудь решали это? У нас точно такая же проблема - создается прокси-клиент wcf из надстройки excel и отлично работает при развертывании на некоторых машинах win7 64 и xp 32, но не на других win7 64 и xp 32! Похоже, что он не собирает конфигурацию, так как даже если я облажаюсь с ним на машинах, которые не работают, его это, похоже, не волнует - как будто это не так далеко. Спасибо   -  person    schedule 01.07.2011
comment
Мы исправили это, скопировав наш WCFClient.config в папку программы Office и переименовав его в WINWORD.EXE.config. Развертывание надстроек для всех пользователей — настоящая проблема.   -  person Filburt    schedule 01.07.2011


Ответы (3)


Можно ли создать конечную точку программно?

MyProxy proxy = new MyProxy (new BasicHttpBinding(), new EndpointAddress("http://server/Service.svc"));

Если это работает, то, скорее всего, это проблема с конфигурацией.

person Roy Dictus    schedule 24.05.2011
comment
Хорошо, я попытался создать конечную точку в PowerShell и мог вызвать метод службы. Я добавлю свою службу и конфигурацию клиента. - person Filburt; 24.05.2011
comment
Я соглашусь с тем, что фактическая проблема заключается в том, что конфигурация явно не читается / недоступна, и исследую, как настроить надстройки VSTO. - person Filburt; 24.05.2011

Эта проблема вызвана тем, что проект развертывания не имеет правильной записи в реестре для файла манифеста. Приведенные выше обходные пути работают, потому что - не найдя файл конфигурации для надстройки word/excel и т. д., посмотрите в местоположении по умолчанию (каталог их программы) и найдите имя файла конфигурации по умолчанию - в случае MsWord WINWORD.EXE. конфиг.

Неправильная форма для записи манифеста:

[TARGETDIR]Addin.vsto|vstolocal

Должен быть:

file:///[TARGETDIR]Addin.vsto|vstolocal

Тогда ваш файл конфигурации будет загружен правильно.

Дополнительные сведения см. в разделе здесь

person Paul Birch    schedule 18.06.2012
comment
Это выглядит интересно — я должен передать это своему преемнику, так как в марте я уволился из компании. - person Filburt; 18.06.2012
comment
Я думаю, что это правильное решение. Чтобы конфиг читался правильно, нам нужно использовать префикс file:/// и суффикс |vstlocal. Спасибо. - person skjoshi; 02.10.2015

У нас была точно такая же проблема с надстройкой Excel 2010, которую мы создали с помощью Visual Studio 2010 .NET4. Мы исправили нашу проблему, следуя обновленному исправлению в этом посте, но хотели уточнить детали нашего исправления, см. ниже.

ОБНОВЛЕНИЕ Я «исправил» это, скопировав файл Client.config в папку программы Office и переименовав его в WINWORD.EXE.config.

Детали нашего исправления следующие:

  1. Удалил нашу надстройку Excel 2010; затем переустановил нашу надстройку Excel 2010 через установщик Windows.
  2. Открыт каталог $EXCEL_HOME. Каталог $EXCEL_HOME — это каталог, в котором находится программа Excel 2010 Office «Excel.exe» (для нас в Windows 7 и XP — C:\Program Files\Microsoft Office\Office14< /эм>)
  3. Скопирована конфигурация нашего приложения/надстройки "MyAddinProjName".dll.config (которая была установлена ​​во время установки надстройки Excel) из папки с установленной надстройкой (C:\Program Files\Microsoft\"MyAddinProjName") в каталог $EXCEL_HOME.
  4. Затем мы переименовали его "MyAddinProjName".dll.config в "Excel.exe.config".
  5. Прыгал от радости после того, как ошибка больше не появлялась.

Мы так и не поняли, почему это произошло на одних машинах, а не на других, но мы знаем, что это исправление/обходное решение позволило нам продолжить тестирование функциональности надстройки. Наше решение для обработки любых установок надстройки, создающих эту проблему, состоит в том, чтобы предоставить сценарий .bat или VB, который могут запустить системные администраторы, который скопирует и переименует файл конфигурации в соответствующие места.

Я надеюсь, что эта информация поможет всем с той же проблемой и прояснит любые недостающие детали :)

person Carlo Arteaga    schedule 05.01.2012