我們正在將舊的.Net Remoting服務遷移到WCF。在閱讀了這個主題之後,我偶然發現了這個元數據對話並在客戶端動態構建代理:它看起來很有希望。服務器和客戶端上的簡化WCF配置
如果可能,我想實現的目標是以最少的配置(即配置文件上沒有明確的<services>
節點)在一個Web應用程序上公開服務,並在客戶端構建代理(通過共享接口)也用最少的配置。
我知道可以在默認情況下爲所有服務公開元數據,但這似乎工作的方式是無用的,因爲它爲每個服務生成不同的URL,然後我需要在我的服務器上維護幾十個硬編碼字符串客戶。
這是我目前的配置文件:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我想有服務器(可能是基址本身,'http://localhost/VirtualDir
「)上的單個網址,並使用該端點自動解決來自任何服務接口客戶。我碰到this somewhat old post,這或多或少是我想達到的。當時,似乎沒有任何方法可以優雅地做到這一點。
是不是有辦法在服務器上暴露單個MEX端點,然後解析其上的任何合約接口?這樣,我將能夠:
- 店客戶
- 在單個URL使用
MetadataResolver
類給定接口 - 獲取端點創建使用解決端點 使用
ChannelFactory<T>
代理
我想在某種工廠類中做到這一點,並將其與Unity IoC容器一起使用。
我想我仍然可以使用某種約定來構建使用已知格式的許多實際端點地址。我想盡量避免這種情況,因爲它仍然會導致問題。
我想你誤解了我的問題。我不打算在服務器上使用MetadataResolver。我想要實現的是到服務器的單個URL,然後在客戶端上使用Resolve,通過所需的接口。至於進行中的電話,我不確定我是否明白你的意思。我們需要這些調用是遠程調用,因爲服務器是一個Web應用程序,客戶端可能是其他Web應用程序,Windows服務或桌面應用程序。我會看看這個路由選項如何工作,謝謝你的提示。 – julealgon
剛開始閱讀有關路由服務後,我看到它只支持SOAP消息?由於我們在某些地方使用泛型列表,因此SOAP序列化程序無法處理泛型類(目前我們在所有服務中都使用二進制序列化),所以這會成爲一個難題。 – julealgon
無賴 - 很抱歉,我無法提供更多幫助。關於正在進行的事情 - 注意到人們在不需要它們的地方引入服務邊界 - 但聽起來像你不是其中之一;) –