توسعه شیرپوینت

مطالب آموزشی مرتبط با توسعه شیرپوینت

ایجاد یک سرویس WCF REST در شیرپوینت 2013 و Deploy آن دریک WSP

ماکروسافت شیرپوینت با فراهم آوردن قابلیت Representational State Transfer (REST) امکان تعامل با تمامی تکنولوژیهایی که از قابلیت Rest پشتبانی می‌کنند را با شیرپوینت ( شامل سایت‌ها ، لیست‌ها ، Document library ها و ... ) فراهم می‌سازد

ماکروسافت شیرپوینت با فراهم آوردن قابلیت Representational State Transfer (REST) امکان تعامل با تمامی تکنولوژیهایی که از قابلیت Rest پشتبانی می‌کنند را با شیرپوینت ( شامل سایت‌ها ، لیست‌ها ، Document library ها و ... ) فراهم می‌سازد. علاوه بر استفاده از قابلیت Rest API در داخل شیرپوینت ، ماکروسافت شیرپوینت امکان ایجاد WCF Rest Service ( Windows Communication Foundation ) های سفارشی را  فراهم کرده است. در این مقاله سعی داریم تا آموزش ایجاد یک WCF سرویس ، هاست شده در داخل شیرپوینت را که توسط یک WSP در شیرپوینت Deploy میشود را به صورت مرحله به مرحله توضیح دهیم.

دستورالعمل ایجاد مرحله به مرحله وب سرویس رست  ( WCF REST Service )در شیرپوینت 

1. ابتدا باید Visual Studio را Run As Administrator نمایید .
2. سپس یک پروژه جدید ایجاد نمایید و Sharepoint 2013 Empty Project را از دسته بندی Sharepoint Solutions انتخاب نمایید.

3. سپس مطمئن شوید که گزینه Deploy as farm solution انتخاب شده است

4.بعد از اینکه پروژه ایجاد شد از قسمت Solution Explorer برروی نام پروژه راست کلیک نمایید و از قسمت Add  گزینه Sharepoint Mapped Folder را انتخاب نمایید. 

 

 5.  از صفحه Add Sharepoint Mapped Folder پوشه ISAPI را انتخاب نمایید و سپس برروی گزینه Ok کلیک نمایید. 

 

 6. سپس از داخل Solution Explorer برروی پوشه ISAPI راست کلیک نمایید و از گزینه Add مورد New Item را انتخاب نمایید. 

 

7. از قسمت General در پنجره Add New Item گزینه Text File را انتخاب نمایید و در قسمت Name ، نام سرویس را PresidentsService.svc قرار دهید و در انتها برروی دکمه Add کلیک نمایید، توجه داشته باشید که به درستی پسوند فایل txt را به svc تغییر داده باشید. 

8.مجددا از قسمت Solution Explorer برروی پوشه ISAPI کلیک کرده و Add -> New Item نمایید.
9.سپس از پنجره Add New Item از قسمت Code گزینه Code File را انتخاب نمایید و عبارت PresidentsService.svc.cs به عنوان نام وارد نموده و برروی دکمه Add کلیک نمایید.

 

10.مجددا از قسمت Solution Explorer برروی پوشه ISAPI کلیک کرده و Add -> New Item نمایید.
11.از پنجره Add New Item در قسمت Code گزینه Interface را انتخاب نموده و عبارت IPresidentsService.cs به عنوان Name وارد کرده و روی دکمه Add کلیک نمایید.

 

 12. در این مرحله باید اسمبلی های لازم را به عنوان رفرنس اضافه کنیم به این منظور از قسمت Solution Explorer برروی گزینه References راست کلیک کرده و گزینه Add Reference… را انتخاب نمایید.

 13.از پنجره Reference Manger در قسمت Framework آیتم های System.Runtime.Serialization و System.ServiceModel و System.ServiceModel.Web را با زدن چک باکس انتخاب نموده و برروی دکمه Ok کلیک نمایید. 

 

 14. با توجه به اینکه Visual Studio به صورت پیش فرض از فایلهای .SVC پشتیبانی نمی‌کند باید برروی نام پروژه از قسمت Solution Explorer راست کلیک کرده و سپس گزینه Unload Project را انتخاب نموده و در انتها برروی دکمه Yes کلیک نمایید. 

 

 15.از قسمت Solution Explorer با راست کلیک کردن برروی پکیج گزینه Edit Barkes.Services.Presidents.csproj را انتخاب نمایید

16.در اولین PropertyGroup ، المنت  TokenReplacementFileExtensions را پایین SandboxedSolution اضافه نمایید و مقدار آن را به SVC ست نمایید، توجه فرمایید که حتما فایل پروژه را ذخیره نمایید.

 

<PropertyGroup>
    ...
    <SandboxedSolution>False</SandboxedSolution>
    <TokenReplacementFileExtensions>svc</TokenReplacementFileExtensions>
</PropertyGroup>

17.بعد از انجام تغییرات ذکره شده باید برروی نام پروژه راست کلیک نموده و گزینه Reload Project را انتخاب نمایید. 

18.PresidentsService.svc را باز نمایید و تعاریف سرویس زیر را در آن وارد کنید، توجه داشته باشید که MultipleBaseAddressWebServiceHostFactory را با مشخصه شیرپوینت خودتان ( موجود در Web.Config  ) جایگزین نمایید. 

<%@ ServiceHost Language="C#" Debug="true"
    Service="Barkes.Services.Presidents.PresidentsService, $SharePoint.Project.AssemblyFullName$"
    CodeBehind="PresidentsService.svc.cs"
    Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory,
    Microsoft.SharePoint.Client.ServerRuntime, Version=15.0.0.0, Culture=neutral,
    PublicKeyToken=71e9bce111e9429c" %>

 19.اینترفیس IPresidentsService.cs را باز نمایید و سپس کد زیر را با ServiceContract و OperationContracts مرتبط خودتان در آن paste نمایید (بدون تغییر هم قابل استفاده است)

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using Barkes.Services.Presidents.Model;

namespace Barkes.Services.Presidents
{
    [ServiceContract]
    interface IPresidentsService
    {
        [OperationContract]
        [WebGet(UriTemplate = "GetAllPresidents",
            ResponseFormat = WebMessageFormat.Json)]
        List<President> GetAllPresidents();

        [OperationContract(Name = "GetPresidentsByLastName")]
        [WebGet(UriTemplate = "GetPresidentsByLastName/{lastName}",
            ResponseFormat = WebMessageFormat.Json)]
        List<President> GetPresidentsByName(string lastName);

        [OperationContract(Name = "GetPresidentsByLastFirstName")]
        [WebGet(UriTemplate = "GetPresidentsByLastFirstName/{lastName}/{firstName}",
            ResponseFormat = WebMessageFormat.Json)]
        List<President> GetPresidentsByName(string lastName, string firstName);

        [OperationContract]
        [WebGet(UriTemplate = "GetPresidentById/{id}",
            ResponseFormat = WebMessageFormat.Json)]
        President GetPresidentById(string id);

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "AddPresident",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json)]
        bool AddPresident(President president);
    }
}

 20.به منظور پیاده سازی سرویس اینترفیس باید PresidentsService.svc.cs را باز نمایید و کد زیر را در آن وارد نمایید.

using Microsoft.SharePoint.Client.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Activation;
using Barkes.Services.Presidents.Model;

namespace Barkes.Services.Presidents
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class PresidentsService : IPresidentsService
    {
        #region Private Members

        private List<President> _presidents;
        private List<President> Presidents
        {
            get
            {
                // If there aren't any presidents in our list, populate with samples
                _presidents = _presidents ?? new List<President>(SampleData.SamplePresidents);
                return _presidents;
            }
        }

        #endregion

        #region IPresidentsService Implementation

        public List<President> GetAllPresidents()
        {
            return Presidents;
        }

        public List<President> GetPresidentsByName(string lastName)
        {
            return GetPresidentsByName(lastName, string.Empty);
        }

        public List<President> GetPresidentsByName(string lastName, string firstName)
        {
            var query = from President p in Presidents
                        where p.LastName.ToLower().Contains(lastName.ToLower())
                           && (string.IsNullOrWhiteSpace(firstName) 
                                ? true 
                                : p.FirstName.ToLower().Contains(firstName.ToLower()))
                        select p;

            return query.ToList();
        }

        public President GetPresidentById(string id)
        {
            var query = from President p in Presidents
                        where p.Id == id
                        select p;

            return query.FirstOrDefault();
        }

        public bool AddPresident(President president)
        {
            Presidents.Add(president);
            return true;
        }

        #endregion

    }
}

 21.یک پوشه به نام Model به پروژه اضافه نمایید ( با راست کلیک کردن برروی پروژه و انتخاب Add -> New Folder )
22.یک کلاس جدید به نام President.cs در داخل پوشه Model اضافه نمایید و کد زیر را در آن با DataContract و DataMembers مرتبط خودتان وارد نمایید ( بدون تغییر هم قابل استفاده است )

using System.Runtime.Serialization;

namespace Barkes.Services.Presidents.Model
{
    [DataContract]
    public class President
    {
        [DataMember]
        public string Id { get; set; }

        [DataMember]
        public string LastName { get; set; }

        [DataMember]
        public string FirstName { get; set; }

        [DataMember]
        public string EmailAddress { get; set; }
    }
}

23.یک کلاس جدید در پوشه Model ایجاد نموده و نام آن را PresidentsData.cs قرار دهید و کد زیر را در آن paste نمایید، در اپلیکشن‌های تجاری معمولا این قسمت از Database یا List و Library های شیرپوینت خوانده می‌شود

namespace Barkes.Services.Presidents.Model
{
    public static class SampleData
    {
        // This array is purposely abbreviated for readability in this article.
        // The complete list of presidents is available in the source download.
        public static President[] SamplePresidents = new President[]
        {
            new President { 
                Id =  "1", FirstName = "George", LastName = "Washington", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id =  "2", FirstName = "John", LastName = "Adams", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id =  "3", FirstName = "Thomas", LastName = "Jefferson", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id =  "4", FirstName = "James", LastName = "Madison", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id =  "5", FirstName = "James", LastName = "Monroe", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id = "43", FirstName = "George W.", LastName = "Bush", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
            new President { 
                Id = "44", FirstName = "Barack", LastName = "Obama", 
                EmailAddress = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید" },
        };
    }
}

24.حال پروژه شما آماده است ، تنها کافیست WSP را ایجاد و سولوشن خود را Deploy نمایید ، پس از deploy می‌توانید سرویس خود را با نام PresidentsService.svc در پوشه hive در آدرس

C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\BarkesServices

پیدا کنید.

عضویت در ماهنامه شیرپوینت

در صورت تمایل می‌توانید با وارد کردن ایمیل خودتان و تایید آن به صورت رایگان در ماهنامه الکترونیکی ما عضو شوید