2013-04-22 39 views
0

正如本主題中所述。我正嘗試從獨立的.asmx Web服務訪問我的Sitecore上下文。想知道是否有正確的做法。Sitecore:從asmx webservice訪問上下文

+2

ASMX是一項傳統技術,不應該用於新開發。 WCF應該用於Web服務客戶端和服務器的所有新開發。一個暗示:微軟已經在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。 – 2013-04-22 02:39:37

回答

6

的Sitecore的語境應該是一個典型的ASMX Web服務的方式提供,但是,因爲對服務的請求可能不會招來默認Sitecore的管道,它是設置站點上下文如下一個好主意:

[WebMethod(EnableSession = true)] 
public string MyServiceMethod() 
{ 
    using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("website"))) 
    { 
     // Here you can access Sitecore.Context 
    } 
} 
+0

只有在將ASMX服務添加到IgnoreUrls時,才需要這樣做。 – techphoria414 2013-04-22 12:56:24

+0

謝謝你的工作 – user446923 2013-04-23 02:30:38

+1

注意這隻適用於單站點場景。 – techphoria414 2013-04-23 02:54:10

3

Sitecore對處理所有訪問應用程序的URL請求相當貪婪。簡單的方法是到dd the URL to the IgnoreUrlPrefixes setting。但是,這會拒絕您訪問某些Sitecore上下文值,例如Sitecore仍然可以根據主機名稱解析的站點和數據庫值。

我建議在httpRequestBegin管道中添加一個處理器,如果URL看起來像你的asmx服務,那麼它會在適當的時候中止流水線(在ExecuteRequest之前)。爲MVC請求執行此操作的示例可以找到here。對於您的asmx服務,您可能需要直接檢查URL字符串。使用處理器類上的屬性配置該URL的獎勵點(c.f. Sitecore Configuration Factory)。