2011-05-24 54 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