由于近期項目的需要,我開始學習MOSS編程,剛開始接觸的時候覺的特別的別扭,覺的沒有自己全新創建的web application來的自由,但是MOSS還是有很多優點的,這篇我先說下自定義webpart的部署問題。
如何創建webpart我并不想在這篇中講,具體我會另外寫一篇關于webpart開發的文章。
MOSS中的webpart與普通.net控件的不同點:
1:webpart一般都是以類庫的形式出現,它是沒有前端可視化頁面的,類似于asp.net中的自定義控件。
2:兩者繼承的基類不同:
1):asp.net控件的基類:System.Web.UI.WebControls.WebControl;
2):webpart的基類:System.Web.UI.WebControls.WebParts.WebPart;
3:兩者生成的文件不同,下面幾個是asp.net控件所不包含的:
1):密鑰文件;
2):每個 Web 部件都應有一個 .webpart 文件,還有一個描述 Web 部件的 XML 文件。這是webpart獨有的特征。
4:MOSS中的webpart部署并不像asp.net網站中的一樣,控件和網站程序放在一起然后部署就行,我總結以個幾點應該注意的地方:
1>:首先把生成的webpart的dll文件復制到sharepoint網站對應的目錄中,而程序集的部署分以下幾種方式:
1):bin目錄,在創建一個web application時,會選擇一個端口,此時在IIS中就會創建一個對應端口的網站目錄:Inetpub"wwwroot"wss"VirtualDirectories"20983,在這個目錄下面有兩個文件夾:_app_bin,bin,將編譯好的程序集放進任何一個目錄即可;
2):全局程序集緩存:全局程序集緩存使各個應用能夠共享程序集,它會被.Net運行時自動加載。它的位置在:[System Drive]"Windows"Assemply。 因為它會強命名程序集,所有具體開發時不推薦這種方式。
3).指定目錄,參考第一條,bin,_app_bin,這兩個文件夾都可以用來部署程序集,MOSS還支持指定目錄方式,這需要在Web.Config中進行配置。在<configuration>節下進行配置:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;_app_bin;CustomBin" />
</assemblyBinding>
</runtime>
小結:其實上面的方式一和方式三是同一原理,實際上可以說是兩種方式。還有一點就是如果想手工復制程序集到sharepoint網站的bin,這里有兩種簡單的方式:
1:選擇項目-屬性-生成-更改輸出路徑到sharepoint網站的bin即可;
2:選擇項目-屬性-生成事件-增加生成事件:
copy "$(TargetPath)" "E:"Inetpub"wwwroot"wss"VirtualDirectories"20983"bin"
BIN目錄的優點和缺點:
1:優點。它是一個單獨信任位置,默認的,代碼訪問安全級別非常低。如果想讓webpart正常運行,一般都需要開發人員顯示的提升BIN目錄的信任級別。一個BIN目錄對應一個web application,這樣我們可以為不同的web application創建不同的獨立代碼。
2:缺點。如果想在另外一個web 應用中應用此webpart,則需要重新部署。
全局程序集緩存的優點和缺點:
1:優點。它是經過簽名的程序集,信任級別最高,屬于完全信任。因為它部署于全局位置,所有能夠被所有web應用所共享。
2:缺點。由于它是完全信任,所以它失去了相應的防御措施。
2>:設置特殊安全屬性,如果是采用部署到bin的方式,則會存在安全性問題,如不做處理則會出現如圖一的情況。
原因:默認情況下bin 目錄的代碼訪問安全權限很低,對存儲的webpart具有特殊的安全約束,Web 部件在執行時不會自動授予完全信任代碼權限。我們可以手工來設置這些屬性。
1:在web.config文件中有一個配置節trust level,是控制信任級別的,我們可以更改此配置節來提升bin目錄的安全性:trust level=Full。
2:在生成的程序集文件 assembly添加一句 [assembly: AllowPartiallyTrustedCallers()]
小結:上面方法一般性地提升了信任級別,所以會授予您可能不需要的任何新權限,這樣就不如另一種創建新信任策略文件的方法安全。創建一個新的信任策略文件,將 web.config 文件指向該新文件。這種方法較為復雜,但是可以更為精確地設置 Web 部件的權限屬性。[引用MSDN],
3>:注冊控件。控件的注冊離不開web.config文件,找到SharePoint節點,在最下面添加如下信息: (Assembly,Version,Culture,PublicKeyToken的查看方式可以通過.Net Reflector。 )
<SafeControl Assembly="WebParts.Samples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" Namespace="WebParts.Samples" TypeName="*" Safe="True" />
</SafeControls>
4>:導入到Webpart部件庫。網站操作-網站設置-修改所有網站設置-庫-web部件-新建-選中剛才創建的webpart-點擊“導入庫”-在頁面中添加webpart即可。
總結:
本文總結了些webpart部署時對于新手的一些困惑,雖然沒有比較深入的地方,但是學會部署webpart是MOSS編程的基本功。希望大家指點。
注:
本文所講的環境均為MOSS 2007。