簡體   English   中英

將第3方界面(通過WCF)公開到Silverlight

[英]Expose 3rd party interface (over WCF) to Silverlight

如果錯過了一些明顯的內容,我進行了很多搜索,很抱歉。 感謝您閱讀下面的文字。

我在這里有一個第三方(閱讀:無權訪問/更改源代碼)應用程序。 它由服務器(Windows服務)和API組成,它們通過遠程處理與服務器通信。 由於多種原因,我想通過WCF公開此API(請參閱主題:一個原因是WCF客戶端)。

問題是,API是

  1. 不可更改(遵循第三方規則)
  2. 不使用WCF本身(在進行遠程處理時,它是可序列化的/ MarshalByRef)
  3. 使用大量的接口和內部實現類

在1以下,我無法自己使用(非常具有侵入性的)WCF屬性。

接下來的2,API本身可以“在線使用”(它們支持通過TCP和HTTP進行遠程處理),但是遠程處理對我來說還不夠好。

以下3我主要是接口(WCF處理不好,不能(反)序列化)。 可以發送實現類,但是-我無法訪問它們。

該API的一般用法基於單個接口(及其成員/屬性),因此典型用法類似於

var entryPoint = new ApiClientEntryPoint();
entryPoint.SomeMethodCall();
entryPoint.PropertyExposingAnInterface.SomeOtherMethodCall();

等等。

我真正想做的是生成(通過盡可能少的精力/代碼)一個代理(不是典型的WCF含義),該代理是通過WCF公開的,並將該層次結構序列化,將客戶端上的每個調用/屬性映射到服務器上的真實內容。

到目前為止,我最近碰到的是該項目的絆腳石,但是我想知道是否有更多/其他工具可以使我的工作中的很大一部分都落到我的肩膀上。

如果有其他一般性建議,最好的方法是將預先存在且不可更改的內容包裝到WCF中,請分享。

我的建議是使用外觀模式。 創建一個特定於您的用法的新WCF服務,並包裝第三方服務。 客戶會與您交談,而您會與第三方交談。 但客戶不會跟第三方直接。

這在大多數但並非所有情況下都適用。 對於YMMV,我不確定您的特定情況。

順便說一句,您可以查看WCF RIA服務,該服務非常適合將服務公開給Silverlight,從而可以避免對服務內容進行大量手工編碼。 但是再次根據您的特定情況,這可能不是最佳的選擇。

編輯:
現在很清楚,API太大和/或客戶端的使用模式太多以有效地使用外觀。 我唯一建議的其他事情就是使用代碼生成工具。 使用反射(假設它是.NET API嗎?)分解API,然后使用收集的詳細信息對新服務進行代碼生成。 您可以查看Visual Studio內置的T4模板,也可以查看更“健壯”的工具,例如CodeSmith。 但是我猜測這將是編寫一些痛苦的代碼。 我不知道針對此的自動化解決方案。

API的文檔是否完整? 如果是這樣,文檔是否為可解析格式,例如XML或結構良好的HTML? 在那種情況下,您可能能夠從文檔中進行代碼生成,而不是通過代碼進行反映。 根據具體情況,這可能會更快。

好吧,我這邊的腦筋計划#1:

  1. 使用Visual Studio重構菜單在“ ApiClientEntryPoint”上“提取接口”。
  2. 創建一個新的WCF服務,該服務實現上述接口,並讓VS為您生成方法存根。
  3. 對於For PropertyExposedAnInterface.SomeOtherMethodCall,由於沒有“嵌套”服務操作的概念,因此您將不得不展平接口。

您唯一的其他選擇是使用T4代碼生成器,它可能比上述想法花費更長的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM