2011-05-24 82 views
0

我在Win2008R2终端服务器上创建并部署了WCF客户端(从VSTO Word Addin启动)。 当执行WCF代理的默认构造函数时,会抛出InvalidOperationException,指出找不到合同的默认端点。WCF VSTO客户端在win2k8上部署时找不到默认端点

在部署到Win7的X64机刚运行正常使用相同的.dll.config

我试图创建内部PowerShell的一个实例,并收到同样的错误相同的WCF客户端。

如果在PowerShell中创建奉献端点我可以EXCUTE服务的方法:

$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> 

UPDATE

我复制我的Client.config到Office程序文件夹,并将其重命名为WINWORD.EXE.config “固定” 这一点。

+0

可能http://stackoverflow.com/questions/2192970/wcfexception-could-not-find-default-endpoint-element-that-references-contract-i – 2011-05-24 13:27:56

+0

的副本@Roy:因为我可以确认工作配置已经到位,所以不是重复的。 – Filburt 2011-05-24 13:32:44

+0

你有没有解决这个问题?我们有完全相同的问题 - 从excel插件中灌输wcf代理客户端,并且在某些机器win7 64和xp 32上部署但在其他win7 64和xp 32上无法正常工作!看起来好像它没有采用配置,因为即使我把它拧在不工作的机器上,它似乎不在乎 - 就好像它没有那么远。谢谢 – 2011-07-01 12:49:24

回答

2

您可以通过编程方式创建端点吗?

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

如果一切正常,那么很有可能它配置问题。

+0

好吧我试着在PowerShell中创建一个端点并且可以调用一个服务方法。我将添加我的服务和客户端配置。 – Filburt 2011-05-24 14:04:48

+0

我会接受,实际问题是配置显然不读/不可访问,并调查如何配置VSTO Addins。 – Filburt 2011-05-24 15:58:49

1

我们对通过Visual Studio 2010 .NET4创建的Excel 2010 Addin完全相同的问题。我们通过在这篇文章中关注更新后的修复来解决我们的问题,但想详细说明我们的修复方法,请参阅下文。

UPDATE 我“固定”这个复制我的Client.config到Office程序文件夹,并将其重命名为WINWORD.EXE.config。

我们的修补程序的详细信息如下:

  1. 卸载我们的Excel 2010中加载项;然后通过Windows安装程序重新安装Excel 2010 Addin。
  2. 打开$ EXCEL_HOME目录。该$ EXCEL_HOME目录是Excel 2010中的Office程序 “EXCEL.EXE” 所在的目录(对于我们在Windows 7和XP - C:\ Program Files文件\的Microsoft Office \ OFFICE14
  3. 复制我们的应用程序/ addin config “MyAddinProjName” .dll。配置(这是Excel加载安装过程中安装)从我们安装的加载项的位置(C:\ Program Files文件\微软\” MyAddinProjName)到$ EXCEL_HOME目录
  4. 然后我们重命名” MyAddinProjName“ .dll.config它到”Excel.exe.config
  5. 错误不再出现后跳转为喜悦。

我们从未想出为什么会发生在某些机器上而不是其他机器上,但我们确实知道这种修复/解决方法允许我们继续测试Addin功能。我们的解决方案可以处理任何出现此问题的Addin安装,以提供系统管理员可以运行的.bat或VB脚本,它将复制配置文件并将其重命名为适当的位置。

我希望这个信息可以帮助大家有同样的问题,明确了任何丢失的细节:)

8

此问题是由没有在注册表中的清单文件中的正确项部署项目造成的。上述解决方法因为 - 没有找到加载项word/excel等的配置文件在默认位置(它们的程序目录)中查找并查找默认配置文件名 - 对于MsWord WINWORD.EXE的情况。配置。

不正确的形式为清单项:

[TARGETDIR]Addin.vsto|vstolocal 

它应该是:

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

那么你的配置文件将正确加载。

欲了解更多信息,请参阅here

+0

这看起来很有趣 - 自从我在这次游行中离开公司后,我必须将此转发给我的继任者。 – Filburt 2012-06-18 15:43:25

+0

这解决了我的问题。谢谢。 – 2012-09-07 13:46:32

+0

我认为这是正确的解决方案。为了正确读取配置,我们需要使用file:///前缀和| vstolocal后缀。谢谢。 – skjoshi 2015-10-02 17:30:01