我使用WCF創建與IIS託管以下文件佈局的SOAP服務:在WCF中繼承web.config文件和HttpContext錯誤?
/
/web.config
/service
/service/test.svc
/service/web.config
在/web.config,我有幾個常規設置(system.codedom等),並在/service/web.config我有一個appSettings部分,其中定義了一些設置。
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="Username" value="user" />
<add key="Password" value="password" />
</appSettings>
然後我有自定義密碼驗證:
public class CustomUserNameValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
string expectedUsername = WebConfigurationManager.AppSettings["Username"];
string expectedPassword = WebConfigurationManager.AppSettings["Password"];
... snip ...
}
}
這是它會很奇怪:
- 在先打到這個服務,expectedUserName和expectedPassword是空
- 在第二次及隨後的命中中,這兩個變量包含來自/service/web.config文件的值
- 如果你得到第二或後續命中,它確實是按預期工作,Web服務器的一個簡單的重新啓動或重新編譯將打破下一擊
事實上,它實際上做的是加載第一次點擊/web.config中的appSettings部分,然後在WCF緩存了WSDL/XSD等的創建之後,它使用/service/web.config。
這看起來像一個錯誤,我似乎無法找到解決方案,而不是將appSettings放入/web.config文件。
也許這是WCF,在第一次命中時,不考慮/ service目錄作爲執行的根,因爲test.svc沒有被編譯(或者它調用的緩存被調用),但是呢?那麼在第一次命中之後,它會在web.config繼承順序中考慮該目錄?
更新:根據下面的註釋,你會看到,即使HttpContext.Current僅在第一次命中時爲空,但是之後的每次命中都不爲空(在服務上具有正確的web.config和屬性以允許ASP.NET兼容模式)。似乎沒有正確加載web.config只是一個更大問題的症狀。
這同樣發生在ConfigurationManager中。 – wojo 2009-09-24 12:51:36
這變得很奇怪。我正在調試HttpContext.Current(查看一些配置文件路徑的私有字段等),並且它在第一次命中時始終爲空。之後,HttpContext.Current可用。 這是利用和服務的屬性,以便能夠到達HttpContext,順便說一句。 –
wojo
2009-09-24 13:08:46
另請參閱MS Connect錯誤:https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=491844 – wojo 2009-09-24 13:45:06