※ WCF 서비스를 이용한 Silverlight 구현 소스 참고
ü Sharepoint 서버에 구현하였던 WCF서비스 파일 배포
1. WCF 서비스 가상 디렉토리 생성하여 해당 디렉토리에 WCF 서비스 전담으로 만들었던 웹사이트 프로젝트의 파일을 아래 그림과 같이 배포합니다.
- Bin 폴더에 dll파일 배포 하지 않고, GAC에 등록하여 svc파일 상단에 아래에 음영 부분을 추가시켜 주시면 됩니다.
Code
Service.svc <%@ Assembly Name="WCFServiceLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1a7a4b23352b442"%> |
2. 생성한 가상디렉토리는 익명 액세스 가능하게 체크합니다.
3. Service.svc 파일을 선택한 후, 마우스 오른쪽 버튼을 클릭하여 “웹 페이지로 보기” 항목을 선택하여 웹 페이지를 보면 Sharepoint 웹사이트에서는 VirtualPath에 관련된 아래와 같은 에러 화면을 볼 수 있습니다.
4. VirtualPath 해결 방안 (관련 링크)
- 클래스 라이브러리 프로젝트를 만듭니다.
- 자동으로 생성된 Class1.cs파일은 삭제하고 System.Web.dll을 참조시킵니다.
- 아래 두 클래스를 추가하여 줍니다.
Code
WCFPatchupModule.cs public class WCFPatchupModule : IHttpModule { private static bool virtualPathProviderInitialized; private static readonly object virtualPathProviderInitializedSyncLock = new object(); public void Dispose() { } public void Init(HttpApplication context) { if (!virtualPathProviderInitialized) { lock (virtualPathProviderInitializedSyncLock) { if (!virtualPathProviderInitialized) { WCFVirtualPathProvider virtualPathProvider = new WCFVirtualPathProvider(); HostingEnvironment.RegisterVirtualPathProvider(virtualPathProvider); virtualPathProviderInitialized = true; } } } } } WCFVirtualPathProvider.cs public class WCFVirtualPathProvider : System.Web.Hosting.VirtualPathProvider { public override string CombineVirtualPaths(string basePath, string relativePath) { return base.Previous.CombineVirtualPaths(basePath, relativePath); } public override ObjRef CreateObjRef(Type requestedType) { return base.Previous.CreateObjRef(requestedType); } public override bool FileExists(string virtualPath) { string str = virtualPath; if (virtualPath.StartsWith("~", StringComparison.Ordinal) && virtualPath.EndsWith(".svc", StringComparison.InvariantCultureIgnoreCase)) { str = virtualPath.Remove(0, 1); } return base.Previous.FileExists(str); } public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart) { return base.Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); } public override string GetCacheKey(string virtualPath) { return base.Previous.GetCacheKey(virtualPath); } public override VirtualDirectory GetDirectory(string virtualDir) { return base.Previous.GetDirectory(virtualDir); } public override VirtualFile GetFile(string virtualPath) { return base.Previous.GetFile(virtualPath); } public override string GetFileHash(string virtualPath, IEnumerable virtualPathDependencies) { return base.Previous.GetFileHash(virtualPath, virtualPathDependencies); } } |
- 어셈블리 서명을 추가해주고, 해당 어셈블리 파일을 GAC에 등록합니다.
- 해당 웹사이트의 Web.Config 파일을 보면, <httpModules>세션에 음영된 부분을 추가합니다
Code
Web.Confing <httpModules> <clear /> <add name="SPRequest" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> <add name="RoleManager" type="System.Web.Security.RoleManagerModule" /> <!-- <add name="Session" type="System.Web.SessionState.SessionStateModule"/> --> <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <!-- Ajax & SIlverlight --> <add name="Session" type="System.Web.SessionState.SessionStateModule" /> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add name="WCFVirtualPathProvider" type="WCFVirtualPathProvider.WCFPatchupModule, WCFVirtualPathProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2bea20c5375d001d"/> </httpModules> |
- Service.svc 파일을 웹 브라우저로 열어 서비스가 정상 작동하지는 확인합니다.
ü Silverlight 응용 프로그램 프로젝트 수정하기
1. 기존에 만든 Silverlight 프로젝트를 열어 참조된 서비스를 클릭하고 “서비스 참조 구성”이라는 항목을 선택합니다.
2. 클라이언트 주소가 나오는데 배포한 WCF 서비스 URL로 변경합니다. 업데이트 진행 상태가 나타나며, 문제가 없으면 업데이트가 완료됩니다.
ü Sharepoint에 Silverlight WebPart 만들기
1. Sharepoint 웹파트 추가 하는 종류
- IIS에 Silverlight 전담 웹사이트를 만들고 배포한 후 Sharepoint의 기본 웹파트 중에 하나인 페이지 뷰어 웹파트를 이용하여 실버라이트를 보여주는 방법이 있습니다.
- System.Web.UI.SilverlightControls.Silverlight 컨트롤을 사용하여 웹파트 클래스를 만드는 방법이 있습니다.
2. 우선 여기서는 Silverlight 컨트롤을 이용하여 웹파트를 추가하도록 하겠습니다. 새 프로젝트 추가합니다. (프로젝트 형식은 클래스 라이브러리을 선택합니다.)
- 실버라이트 응용 프로그램 빌드 후, xap 파일을 _layouts의 특정 폴더 배포합니다. )다른 방법으로는 문서 라이브러리 등에 배포 하셔도 상관없습니다.)
- Silverlight 웹파트 클래스 만들기
Code
DemoSilverlight.cs using System; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.SharePoint; namespace SilverlightWebParts { public class DemoSilverlight : Microsoft.SharePoint.WebPartPages.WebPart { protected override void OnLoad(EventArgs e) { base.OnLoad(e); ScriptManager sm = ScriptManager.GetCurrent(this.Page); if (sm == null) { sm = new ScriptManager(); Controls.AddAt(0, sm); } } protected override void CreateChildControls() { base.CreateChildControls(); System.Web.UI.SilverlightControls.Silverlight ctrlSilverlight = new System.Web.UI.SilverlightControls.Silverlight(); ctrlSilverlight.ID = "SilverlightControl"; ctrlSilverlight.Source = SPContext.Current.Web.Url + "/_layouts/Silverlight/SilverlightApplication.xap"; ctrlSilverlight.Width = new Unit(600); ctrlSilverlight.Height = new Unit(400); this.Controls.Add(ctrlSilverlight); } } } |
Description
ð 로드 이벤트(OnLoad 이벤트)에 보시면 ScriptManager 라는 컨트롤이 추가되어 있는데, 반드시 추가하여야 합니다. 클래스 안에 추가하는 방법 말고, 마스터 페이지 상단에 <asp:ScriptManager ID=”ScriptManager1” ></asp:ScriptManager>라고 추가하셔도 됩니다.
ð Silverlight 컨트롤에 많은 속성들이 있는데 그 중에 Source를 보시면 xap파일(Silverlight 패키지 파일)을 배포한 URL 주소가 들어 있습니다.
3. 해당 dll 파일을 GAC에 등록하시고, Sharepoint 웹파트 갤러리에 추가한 후, 원하는 화면에 웹파트를 추가하시면 아래와 같은 Silverlight 웹파트가 완성됩니다.
'Solution Platform' 카테고리의 다른 글
간단한 SPList 권한 체크 방법 (0) | 2009.07.08 |
---|---|
MOSS WebService 목록 (0) | 2009.06.30 |
Sharepoint 에 Silverlight 2.0 환경 구성하기 (0) | 2009.06.29 |
How to: Use the MOSS Enterprise Search FullTextSqlQuery Class (0) | 2009.05.13 |
Calling the SharePoint Web Services with jQuery (0) | 2009.04.15 |