簡體   English   中英

服務器和客戶端上的簡化WCF配置

[英]Simplified WCF configuration on server and client

我們正在將舊版.Net Remoting服務遷移到WCF。 在閱讀了一段時間后,我偶然發現了這個元數據討論,並在客戶端上動態地構建代理:這似乎很有希望。

如果可能的話,我想實現的是以最小的配置(即配置文件上沒有顯式的<services>節點)在一個Web應用程序上公開服務,並在客戶端(通過共享接口)構建代理。用最少的配置。

我知道默認情況下可以公開所有服務的元數據,但是這種方法似乎沒有用,因為它為每個服務生成不同的url,然后我需要在客戶端上維護數十個硬編碼字符串。

這是我當前的配置文件:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

我想在服務器上有一個URL(也許是基地址本身為'http://localhost/VirtualDir '),並使用此端點自動從客戶端解析任何服務接口。 我遇到了這個有點老的職位 ,這或多或少是我想要實現的。 當時,似乎沒有任何方法可以優雅地做到這一點。

是否沒有辦法在服務器上公開單個MEX端點,然后解析服務器上的任何協定接口? 這樣,我將能夠:

  1. 在客戶端上存儲一個URL
  2. 使用給定接口的MetadataResolver類檢索端點
  3. 使用已解析的終結點使用ChannelFactory<T>創建代理

我想在某種工廠類中執行此操作,並將其與Unity IoC容器一起使用。

我想我仍然可以使用某種約定使用已知格式來構建許多實際的端點地址,從而使這項工作有效。 但我想避免這種情況,因為它仍然可能導致問題。

我可以通過兩種方法來考慮如何實現這一目標:

  1. 使用WCF路由服務,並使用過濾器根據肥皂操作或其他內容進行路由。
  2. 創建一個處理請求中的Message實例的終結點,然后在內部對其進行轉換

WCF路由的缺點在於,它本身就是另一個WCF服務。 我不確定選項2是否完全可以按照您的描述描述。

檢查此MSDN雜志文章

同樣,MetadataResolver主要用於客戶端,以在調用它們之前動態解析服務上的端點。 正如您所描述的那樣,我在服務端上從未見過這種實現。

此外,還有一點要注意,WCF設計為用於定義兩個應用程序進行通信的顯式邊界。 這種分離是明確的,並表示為對抽象的,冗長的外部合同的相互接受。 我認為,試圖擺脫這種明確的契約會引起質疑,為什么首先需要邊界。 如果可以的話,對進程內運行的服務進行調用幾乎總是更好的選擇。

暫無
暫無

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

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