2010-02-03 77 views
0

我們希望將WCF保留在配置文件中。限制代碼中的WCF配置

同時,如果數據將通過未加密的網絡發送,我們希望代碼拒絕請求。例如:如果請求是basichttpbinding沒有HTTPS,拋出異常。

有什麼辦法讓服務代碼知道它是如何被調用的?

編輯

從它看起來像這個問題的意見是不說清楚。

我想要做的是「修復」以下情況:我們使用basichttpBinding和https安裝服務。然後管理員將其更改爲不使用https。結果是數據通過網絡未加密發送。

+0

你說你想要阻止你的服務的配置改變某些方法?例如,你想防止添加basicHttpBinding? – 2010-02-04 00:38:20

+0

是的,我已經更新了這個問題以使其更清楚(希望) – 2010-02-04 09:29:16

回答

1

你是自承?最簡單的方法是:

ServiceHost serviceHost = new ServiceHost(typeof(Service1), "http://localhost:1234/MyService/xml"); 

foreach (ServiceEndpoint sep in serviceHost.Description.Endpoints) 
{ 
    if(sep.Binding.Scheme != "https") 
    { 
     // either just remove that endpoint, or signal an error 
    } 
} 

當然,當你在IIS託管,這變得有點麻煩......你可能必須創建自己的自定義ServiceHost後代做此項檢查,並確保您的基於IIS的* .svc文件使用該自定義主機。當然,一個聰明的管理員可能會欺騙,通過使用基地ServiceHost,而不是您自己的自定義主機類......

3

我不確定我明白你想要什麼......你是在談論如何驗證服務本身,如何調用它,並拒絕一些請求,如果他們不符合某些標準?我敢肯定,可能可以完成(至少某些事情,如檢查SSL或多或少簡單),但首先我會問,爲什麼,如果你只希望你的服務通過安全綁定調用,爲什麼你首先使用不安全的服務公開服務。確保服務配置是否正確不是更有意義嗎?

1

我沒有爲您舉例,但請記住,您可以通過使用WCF進行配置來執行任何操作,您可以在代碼中進行操作。你甚至不需要一個配置文件。