Bazen geliştirmiş olduğunuz webpartlarda servis kullanma ihtiyacı duyarsınız.SharePoint Server webpartlarda kolaylıkla entegre edilebilir halde WCF veya Web Servis geliştirilebilir.Fazla lafı uzatmadan küçük bir örnekle anlatmaya çalışacağım.

Önce bir webpart projesi açalım atıyorum burda toplama yapmak istiyorsunuz, kayıt yapmak isyitorsunuz veya kullanıcı bilgileri yapmak istiyorsunuz.Bunun için oluşturmuş olduğunuz webparta bir tane Operation Contract‘ın yazışlacağı nesnemizi dahil edelim onun için projemize Wcf Service templatinde bir nesne ekleyelim.

 

wcf service template i ekleyelim

wcf service template i ekleyelim

Fonksiyonlarınızı eklerken System.ServiceModel.Web kütüphanesini eklemeniz gerekebilir.Sonrasında metodumuzun ayarlarını aşağıdaki gibi yapalım.

 
    [ServiceContract]
    public interface ICalculateService
    {
        [OperationContract]
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetAdd?v={num1}&b={num2}")]
        int AddGet(string num1, string num2);

        //BodyStyle  da verilen Bare veya Wrapped aslında sizin post ederken göndermiş olduğunuz JSON datasının yapısını belirtir.
        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/Record")]
        bool Record(Person p);

        [OperationContract]
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetUsers")]
        Person GetUsers();

    }

    [DataContract(Name = "person")]
    public class Person
    {
        [DataMember(Name = "name")]
        public string Name { get; set; }

        [DataMember(Name = "surname")]
        public string Surname { get; set; }

        [DataMember(Name = "age")]
        public int Age { get; set; }
    }

CalculateService nesnemizin içinide aşağıdaki gibi yapalım:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class CalculateService : ICalculateService
    {

        public int AddGet(string num1, string num2)
        {
            return num1.ToMyInt() + num2.ToMyInt();
        }

        public bool Record(Person p)
        {
            // 😀
            if (p != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public Person GetUsers()
        {
            Person _person = new Person()
            {
                Name = "Ahmet",
                Surname = "Çebişli",
                Age = 100
            };

            return _person;
        }
    }

    public static class ExtensionMethods
    {
        public static int ToMyInt(this string value)
        {
            return Convert.ToInt32(value);
        }
    }

Şimdi ise sevisi oluşturup linkini alalım bunun için önce bir kaça ayar yapalım.

1-Önce projeyi Deploy edelim.

2-Sonra Assembly klasörünü açıp ordan webpartla ilgili bilgileri alalım.

2

3-Sonra webpart projemize isapi folderımızı ekleyelim.

3

4

 

4-Sonra oluşturulan ISAPI klasörünün içine projenin adıyla alt klasör oluşturalım.

5-Şimdi klasörün içine .svc uzantılı CalculateWCFService.svc dosyası ekleyelim.

5

 

6-Sonra eklemiş olduğumuz bu dosya içine servis tanımlamalarını yazalım.[NOT:Assembly de webpartla ilgili bilgileri buraya yazdık.]

<%@ ServiceHost Language="C#" Debug="true" Service="UsingWcfinSharePointWebpPart.CalculateService, UsingWcfinSharePointWebpPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b1cb1cbc370b4ce1"  CodeBehind="CalculateWCFService.svc.cs"  Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Artık bundan sonrası servisi kullanmakta.Bu arada unutmadan servisi aşağıdaki gibi çağıracağız.

/_vti_bin/UsingWcfinSharePointWebpPart/CalculateWCFService.svc/[Method ismi]

Şimdi bir tane toplama işlemi yapalım.Bunun için jquery’nin ajax kütüphanesini projemize ekledik.Fonksiyonumuz aşağıdaki gibidir.

function AddNumbers() {
        var num1 = document.getElementById("<%= txt_num1.ClientID %>")
        var num2 = document.getElementById("<%= txt_num2.ClientID %>")
        var uri = "GetAdd?v=" + num1.value + "&b=" + num2.value;
        $.ajax({
            type: "GET",
            contentType: "application/json",
            url: "/_vti_bin/UsingWcfinSharePointWebpPart/CalculateWCFService.svc/" + uri,
            dataType: "json",
            //If the call succeeds    
            success:
                       function (response) {
                           alert(response);
                       },
            //If the call fails       
            error:
                       function (XMLHttpRequest, textStatus, errorThrown) {
                           alert(errorThrown);
                       }
        });
    }

Şimdi de bir tane kayıt işlemi yapalım.Bilgileri Post ile server tarafına aktaralım.

    function AddRecord() {
        var name = document.getElementById("<%= txt_name.ClientID %>")
        var surname = document.getElementById("<%= txt_surname.ClientID %>")
        var age = document.getElementById("<%= txt_age.ClientID %>")
        var _person = { "name": name.value, "surname": surname.value, "age": parseInt(age.value) };
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/_vti_bin/UsingWcfinSharePointWebpPart/CalculateWCFService.svc/Record",
            dataType: "json",
            data: JSON.stringify(_person),
            //başarılı bir şekilde çalışırsa
            success:
                function (response) {
                    alert(response);
                },
            //Hata alırsak
            error:
                function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
        });
    }

Örneğin bir tane de nesne gönderelim.Gelen bilgiyi ekranda gösterelim.

    function ShowInfo() {
        $(".userinfo").ajaxStart(function () {
            $(this).hide();
            $(".loading").show();
        });

        $(".loading").ajaxComplete(function () {
            $(this).hide();
            $(".userinfo").show("slow");
        });

        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "/_vti_bin/UsingWcfinSharePointWebpPart/CalculateWCFService.svc/GetUsers",
            dataType: "json",
            //başarılı bir şekilde çalışırsa
            success:
                function (response) {
                    $(".name").text(response.name);
                    $(".surname").text(response.surname);
                    $(".age").text(response.age);
                },
            //Hata alırsak
            error:
                function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
        });
    }

Bu makalemde SharePoint webpartta WCF kullanmaya çalıştık.Elimden geldiğince CLIENT tarafından da örnek vermeye çalıştım.

KAYNAKLAR

1-http://ranaictiu-technicalblog.blogspot.com/2011/09/sharepoint-2010-access-wcf-service-with.html

2-http://sharepoint-comments.com/2011/10/13/creating-a-wcf-web-service-and-calling-json-objects-from-jquery-sharepoint-2010/

3-http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON

 

Proje ektedir.

 

SharePoint WebPart ile Custom WCF kullanımı
SharePoint WebPart ile Custom WCF kullanımı
UsingWcfinSharePointWebpPart.rar
295.8 KiB
65 Downloads
Ayrıntılar...