程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Asp.Net Ajax 學習筆記 Profile Service擴展方式

Asp.Net Ajax 學習筆記 Profile Service擴展方式

編輯:.NET實例教程

這次的課程首先說明了AJax技術濫用的危害。

AJax是一個很好的技術但是象很多事情一樣,過度使用就會有一定的危害。

  1. Round-trip增多導致性能降低。Round-trip就是只提交到服務器和服務器回發的次數增多,這樣,增大了服務器的響應次數,導致服務器負擔增大。
  2. 交互性降低導致用戶體驗變差。主要的問題在於Ajax是無刷新的在處理頁面,有的AJax頁面沒有提供數據正在加載的提示,導致用戶不清楚現在數據是否正在提交或者加載。
  3. 無端使用Ajax技術容易增加安全隱患。這個大家應該清楚,使用Ajax會通過Ajax訪問WebService,我不知道Ajax是否可以使用Soap Head驗證客戶,並且AJax能否訪問帶有SSL的WebService,我覺得如果能解決這兩個問題,安全方面應該不用太擔心。
  4. Ajax技術是天生的搜索殺手。使用了AJax的頁面可能會導致搜索引擎的搜索程序不能找到。

為了減輕服務器的負擔,Ajax應用種應該使用預加載,就是說在頁面第一次訪問服務器的時候,就將應該回發的數據傳送到客戶端,用戶操作使用AJax調用的時候不是從服務段取得數據,而是從客戶端。

Profile Service的預加載

 

通過ProfileService的LoadPropertIEs屬性,進行Profile的預加載。

客戶端調用ProfileSerivce的實質就是ASP.Net AJax調用包裝了Profile的WebService.

那麼我們可以通過兩種手段來擴展Profile。

1、擴展ASP.Net的Profile

自定義一個Profile類CustomProfile,他繼承於System.Web.Profile.ProfileProvider類,CustomProfile類,需要實現以下抽象方法

  • Initialize
  • ApplicationName
  • GetPropertyValues
  • SetPropertyValues
  • DeleteProfiles
  • DeleteInactiveProfiles
  • GetAllProfiles
  • GetAllInactiveProfiles
  • FindProfilesByUserName
  • FindInactiveProfileByUserName
  • GetNumberOfInactiveProfiles

然後需要在WebConfig文件裡指定ProfileProvider由哪個類來提供。如下例



 <profile enabled="true" automaticSaveEnabled="true" defaultProvider="CustomProvider">
      <providers>
        <clear />
        <add name="CustomProvider"
             type="CustomProvider"
             connectionStringName="ProfileDatabase" 
             applicationName="ProfileSample" 
             description="Sample for ASP.Net profile and Profile Service" />
      </providers>
      <propertIEs>
        <add name="Name" type="System.String"/>
        <add name="Email" type="System.String" />
        <add name="Age" type="System.Int32" />
        <group name="Address">
          <add name="City" type="System.String" />
          <add name="Street" type="System.String" />
          <add name="PostalCode" type="System.String" />
        </group>
      </propertIEs>
    </profile>

當然這樣繼承ProfileProvider的方法,十分的繁瑣,我們需要重寫很多的基類。

那麼ASP.Net AJax訪問Profile的時候,外部包裝了一層WebService,我們可以重寫這個類。

2、重寫AJax客戶端訪問Profile的WebService。



[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class CustomProfileService : System.Web.Services.WebService
...{

    [WebMethod]
    public IDictionary<string, object> GetAllPropertIEsForCurrentUser()
    ...{
        return null;
    }

    [WebMethod]
    public IDictionary<string, object> GetPropertiesForCurrentUser(string[] propertIEs)
    ...{
        return null;
    }

    [WebMethod]
    public int SetPropertIEsForCurrentUser(IDictionary<string, object> values)
    ...{
        return 0;
    }
}

GetAllPropertiesForCurrentUser方法:從當前用戶得到所有的PropertIEs,返回值是一個字典的集合,包含了由客戶端傳來的鍵值對應。

GetPropertiesForCurrentUser:從當前用戶根據指定的Properties集合名字得到這些PropertIEs字典已和。

SetPropertiesForCurrentUser:為當前的用戶設置PropertIEs集合。參數是一個關於這個用戶的字典集合。

那麼在實現這些方法之後,需要在ScriptManager裡指定ProfileService的路徑,告訴客戶端調用這個Profile Web Service



<ASP:ScriptManager ID="ScriptManager1" runat="server">
            <ProfileService Path="CustomProfileService.asmx" />
</ASP:ScriptManager>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved