2009-08-11 103 views
2

我有一個Silverlight應用程序通過WCF服務與服務器端進行通信。最初,我擁有主要Silverlight應用程序中的所有內容,但現在我想將我們的一些類分解爲單獨的Silverlight類庫項目。然而,這給了我一些奇怪的問題...Silverlight類庫中的WCF服務參考

我想將WCF通信的類別分解到單獨的項目。所以我:

  • 創建一個新項目; Silverlight類庫
  • 將我的Silverlight應用程序中的類移至我的Silverlight類庫
  • 由於我不再從應用程序調用該應用程序,因此刪除了應用程序中的服務引用。
  • 從類庫項目中添加了一個服務引用。

現在 - 編譯很好,我得到了類庫中的服務東西的智能感知,所以它似乎很好。我還更新了服務並獲得了類庫中的更新。 但運行做一個服務調用給出以下錯誤,當它失敗的應用程序時:

InvalidOperationException異常是由用戶代碼未處理

找不到引用合同「MyServiceReference.IMyService」在默認終結點元素ServiceModel客戶端配置部分。這可能是因爲沒有找到適用於您的應用程序的配置文件,或者因爲在客戶端元素中找不到匹配此合同的端點元素。

好像找不到服務,但爲什麼?我認爲從Silverlight類庫中獲取服務引用應該沒有問題,因爲它允許我添加一個?

回答

2

IT無法找到任何服務配置 - 您在哪裏配置WCF服務?默認情況下,客戶端應用程序(EXE)將具有包含要連接到的服務端點的app.config。

默認情況下,類庫(DLL)沒有自己的配置,但依賴於其託管應用程序爲它們提供配置。

所以總而言之 - 您可能會錯過客戶端端點的配置。最有可能的是,它已經在類庫項目中創建爲app.config,但沒有被使用,實際上 - 您必須將<system.serviceModel>部分移到主應用的配置中(我在Silverlight中不流利,但你會知道該把它放在哪裏)。

Marc

+0

Thx - 解決了它!通過複製類庫項目中的ServiceReferences.ClientConfig內容或在應用程序項目中添加相同的服務引用來解決。所以我認爲它是應用程序本身將處理服務請求,即使它是在其他地方定義的?但是,這感覺有點hacky ..是否可以在類庫項目中使用服務引用? – stiank81 2009-08-11 09:48:49

+1

哦,當然 - 我想說,在類庫中提供服務引用是非常實用的。只要記住把他們的配置放在主應用程序 - 這就是全部:-) – 2009-08-11 10:32:03

+0

好:-) Thx的答案! – stiank81 2009-08-11 11:02:06