当部署在win2k8上时,WCF VSTO客户端找不到默认端点

问题描述

|| 我在Win2008R2终端服务器上创建并部署了WCF客户端(从VSTO Word Addin启动)。 执行WCF代理的认构造函数时,将抛出“ 0”,表示找不到合同的认端点。 当部署到Win7 x64计算机上时,相同的WCF客户端可以使用相同的.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,我对此进行了“修复”。     

解决方法

您可以通过编程方式创建端点吗?
MyProxy proxy = new MyProxy (new BasicHttpBinding(),new EndpointAddress(\"http://server/Service.svc\"));
如果可行,则很可能是配置问题。     ,此问题是由部署项目在清单文件的注册表中没有正确的条目引起的。上面的变通办法之所以起作用,是因为-在MsWord WINWORD.EXE的情况下-找不到外接程序word / excel等的配置文件,请在默认位置(其程序目录)中查找并寻找默认的配置文件名。配置。 清单条目的错误形式为:
[TARGETDIR]Addin.vsto|vstolocal
它应该是:
file:///[TARGETDIR]Addin.vsto|vstolocal
然后,您的配置文件将正确加载。 有关更多信息,请参见此处     ,我们通过Visual Studio 2010 .NET4创建的Excel 2010插件存在完全相同的问题。我们通过遵循本文中更新的修复程序来解决问题,但希望详细说明我们的修复程序,请参见下文。   更新   通过将Client.config复制到Office程序文件夹并将其重命名为WINWORD.EXE.config,我对此进行了“修复”。 我们的修复程序的详细信息如下: 卸载我们的Excel 2010加载项;然后通过Windows Installer重新安装我们的Excel 2010 Addin。 打开$ EXCEL_HOME目录。 $ EXCEL_HOME目录是Excel 2010 Office程序\“ Excel.exe \”所在的目录(对于Windows 7和XP上的我们-C:\\ Program Files \\ Microsoft Office \\ Office14) 从我们已安装的Addin位置(C:\\ Program Files \\ Microsoft \\“ MyAddinProjName \”)复制我们的应用程序/插件配置\“ MyAddinProjName \”。dll.config(在Excel插件安装过程中安装)。 $ EXCEL_HOME目录 然后,我们将\“ MyAddinProjName \”。dll.config重命名为\“ Excel.exe.config \” 错误不再出现后,为之高兴。 我们从来没有弄清楚为什么这是在某些机器上而不是其他机器上发生的原因,但是我们确实知道,此修复程序/解决方法使我们能够继续测试Addin功能。我们用于处理出现此问题的Addin的所有安装的解决方案是提供一个.bat或VB脚本,系统管理员可以运行该脚本,它将配置文件复制并重命名到适当的位置。 希望这些信息对遇到相同问题的所有人有所帮助,并澄清所有遗漏的细节:)