2012-02-07 41 views
2

我在asp.net(ASMX)中創建了一個用於緩存目的的Web服務。 使用此WS的網站請求並獲取共享類型對象(即網站& webservices使用包含該對象類型的相同DLL)。如何從Web服務返回或投射相同類型

但是會發生什麼情況是,網站從Web服務獲取響應,並且類型正在被WS的名稱空間包裝。例如

。 如果我在共享DLL中有一個類Core.Person ,則webservice返回Core.Person。 (即使它知道core.person)將獲得WebServiceNS.Person

這不會允許我投它。

如何從WS中獲取這些對象時仍然可以使用相同的原始DLL名稱空間?

感謝

+0

你如何添加對象緩存?你可能會寫完舊的對象。發佈您將對象添加到緩存的代碼。 – 2012-02-07 06:12:57

+0

HttpRuntime.Cache.Add(cacheKey,new Core.Person(10),null,DateTime.UtcNow.AddDays(1),System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default,null ); – Himberjack 2012-02-07 06:15:31

+0

@AmarPalsapure - 我沒有看到它是如何與緩存相關的 – Himberjack 2012-02-07 06:15:52

回答

1

您不應該將ASMX服務用於新開發。這是一項傳統技術。

此外,它沒有能力做你想做的。另一方面,WCF可以輕而易舉地做到這一點。

0

其實當我們添加一個webservice的參考VS生成一個存根所有由WS所需的對象創建類。 (這些是基於Web服務器上託管的WSDL文件的)。我們與webservice的所有通信都使用這個存根完成。我想你必須爲此編寫自己的copy constructor

+0

似乎combersome ...必須有一種方法,至少可以把它轉換成原來的類型... – Himberjack 2012-02-07 06:27:45

+0

雖然有一些「不推薦」的方式可用。 (http://ryanfarley.com/blog/archive/2004/05/26/737.aspx)在後面的段落中,您可以看到這種技術的優點/缺點。 – 2012-02-07 06:59:36

1

一個解決方案可以是,而不是使用ASMX服務使用WCF服務。 WCF服務允許您使用現有結構進行web服務調用。在這種情況下,你不需要創建你的服務的參考。您可以在兩個項目中使用相同的Core.dll

如果您需要任何幫助,請發表評論。

希望這對你有用。