2013-07-02 52 views
0

我被要求更改舊版.asmx Web服務,並且有幾個問題我希望得到一些指導。是否需要ASMX Web服務啓用會話和響應格式

的Web方法的裝飾是這樣的:

[WebMethod(EnableSession = true), ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

在我的特定方法,我從一個數據庫,這是我返回爲對象的使用JSON列表返回數據。

我注意到JSON仍然沒有返回:ScriptMethod(ResponseFormat = ResponseFormat.Json部分。

在這種情況下:

  • 可我安全地從這裏刪除此?

  • 如果它仍然有效,是否意味着它將在基類或配置文件的其他地方配置?

  • (EnableSession = true)的用途是什麼?如果服務沒有更新數據並且讀取的數據很少更改,那麼它是否需要?

對不起,基本含糊不清的問題,但我以前沒有使用.asmx Web服務。請有人指點我正確的方向嗎?

感謝

回答

1

AS @Karl已經表示,如果您需要訪問webmethod中的Session,則必須使用上述屬性修飾您的方法。

現在我看到人們抱怨的WebMethod沒有返回的SO和Asp.net官方論壇JSON響應,即使他們裝飾了他們的方法與

ScriptMethod(ResponseFormat = ResponseFormat.Json) 

,因爲他們可能在web.config中缺少配置。

我建議你去通過戴夫·沃德下面的文章,可以幫助您瞭解需要做的事情與ASMX返回JSON響應的內容:

ASMX and JSON – Common mistakes and misconceptions

ASMX ScriptService mistake: Installation and configuration

1

EnableSession = true允許您訪問Session集合,這是HttpContext.Current.Session的一部分。如果Web方法中的代碼不使用Session集合,那麼可以安全刪除,但如果它確實使用了集合Session,那麼刪除此屬性將導致Web服務邏輯拋出異常,因爲它不會有權訪問Session集合。

ScriptMethod(ResponseFormat = ResponseFormat.Json)明確定義此web方法將返回JSON,但由於JSON是默認返回類型,因此刪除它並不重要。所以簡短的回答是,是的,刪除它是好的,但它不會傷害到它(實際上我會認爲這樣更好,因爲它明確指出這件事正在返回JSON數據)。

+0

感謝。原諒我,爲什麼JSON是默認的返回類型?它是「開箱即用」還是配置在其他地方? – davy

+1

開箱即用,配置通過屬性完成。例如,如果你的Web服務方法使用了'XmlDocument'對象,那麼你會希望將你的響應格式更改爲XML,如下所示:'ScriptMethod(ResponseFormat = ResponseFormat.Xml)'。 –

+0

您應該閱讀[ScriptMethod屬性的MSDN文檔](http://msdn.microsoft.com/zh-cn/library/system.web.script.services.scriptmethodattribute.aspx) –