2011-09-30 49 views
2

我們有一個內置於VB6的EPOS系統。客戶使用Microsoft Dynamics AX作爲CRM系統。第三方爲我們的客戶創建了AX實現,他們已經公開了我們需要使用的一組WCF Web服務來同步EPOS和AX CRM之間的數據。瞭解VB6會遇到調用WCF服務的問題,我創建了以下組件來處理EPOS和AX CRM之間的通信。VB6軟件使用WCF Web服務。 App.config中的端點。錯誤VB6沒有App.config

VB6 EPOS它調用 - >
1)VB6 DLL包裝它調用 - >
2).NET(3.5)COM可調用代理DLL包裝它調用 - >
3).NET(3.5)Web服務處理程序(其中Web服務實際被調用的地方) - >
Microsoft Dynamics AX CRM。

我建Vb.NET測試控制檯應用程序來模擬從VB6調用幫助調試,以便測試控制檯應用程序調用組件2.

雖然這樣做,我收到以下異常: -

「(找不到在servicemodel客戶端配置部分中引用合同'X'的默認端點元素,這可能是因爲沒有爲您的應用程序找到配置文件,或者因爲在客戶端中找不到匹配此合同的端點元素元素。)「

我搜索了一下,發現我必須將組件3的app.config中的綁定和端點部分複製到我的測試控制檯應用程序的新app.config中。我不知道WCF,現在還沒有足夠的時間去真正學習它,直到我明白爲什麼這會修正這個錯誤。

現在,雖然我試圖從VB6 EPOS調用服務,並且此錯誤再次彈出。所以我給組件2添加了一個app.config,認爲組件2是鏈中的第一個.NET(3.5)組件,這是端點聲明應該去的地方,但不是。錯誤仍然彈出。

有沒有人有任何想法?任何編程英雄,可以擺脫這個簡單的一些簡單的請點亮?請不要問我們爲什麼不重寫EPOS。我們會。只是還沒有。這裏有超過300萬行意大利麪代碼,我只用了8個月的時間!

另外,這種情況不會破壞OOP的黃金法則之一,即封裝。爲什麼我的VB6 EPOS需要知道組件3用於訪問WCF服務的端點?這裏

回答

1

大問題...

你的問題基本上所有與WCF服務工作所需的必要配置數據的到來。

在處理.NET Windows或Web應用程序時,WCF服務的客戶端和服務器端的配置數據都駐留在應用程序配置文件中。對於Windows應用程序,該文件將是app.config,而它將是Web應用程序的web.config。

在你的情況下,你想把代理邏輯放在某種形式的COM可見的.dll文件中。

這會導致你一些悲傷......在.NET平臺中,頂級主機應用程序(web或windows)的.config文件是讀取所有配置數據的地方。即使你的應用程序利用了數十個。.NET程序集(每個都有自定義配置需求),運行時期望這些配置元素都駐留在最上面的應用程序配置文件中。

要解決您的問題,您需要與VB6有權訪問的服務(想想ASMX Web服務)進行通信,並讓該服務將您的調用轉發給適當的WCF服務。

另一種方法是將配置變量直接從您的VB6應用程序傳遞到Com-visible程序集,以便您可以使用WCF的可擴展性模型創建代理(覆蓋默認行爲以從文件讀取配置數據)傳入配置。

我會說,後一種情況可能是兩種方式,只要違反SOA/OOP ..取決於情況它可能/可能不適合VB6應用程序瞭解/存儲配置詳細信息與(最終)WCF端點通信

+0

感謝您的支持!我會研究你的建議。不過要說,我認爲我的觀點重新打破OOP的規則,儘管如此。我想不出爲什麼在這樣的情況下,你的初始調用者應該知道什麼是組件中的幾個步驟。也許這是因爲我不知道WCF。更好地學習它快! – psiberman

+0

對,我認爲在大多數情況下,初始調用者知道有關如何調用WCF服務的詳細信息是可以的。有關地址,合同,綁定,端點等的配置細節實際上只是描述如何到達服務的信息部分,而不是真正關於服務的作用或它的作用...... – fdfrye

+0

您也可以創建一個' MyVB6.exe.config'文件(其中_MyVB6.exe_是使用WCF服務的VB6可執行文件),以便找到WCF服務配置信息。我以前成功完成了這個任務。此外,爲了調試,您還可以實際創建一個'VB6.exe.config'文件,因爲通過VB6.exe可執行文件進行調試。 HTH。 – fourpastmidnight