Jump to content
IT-პროგრამირების ფორუმი
Sign in to follow this  
BERU

[ტუტორიალი] <<< WCF სერვისის შექმნა, დაჰოსტვა ვებ აპლიკაციაში და მისი დემონსტრირება.

Recommended Posts

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using ServiceMethods.ServiceReference1;
using System.Reflection;

namespace ServiceMethods
{
    class Program
    {
        static void Main(string[] args)
        {
            Service1Client client = new Service1Client();
            List<string> methodNames = new List<string>();
            MethodInfo[] methods = client.GetType().GetMethods();
            methods.ToList().ForEach(m => methodNames.Add(string.Format("{0}()", m.Name)));

            methodNames.ForEach(mn => Console.WriteLine(mn));
        }
    }
}

Share this post


Link to post
Share on other sites

ეს პოსტი რომ განავრცო და ტუტორიალად აქციო, ანუ როგორ ხდება სერვისის დამატება საიტიდან, მერე იმ სერვისების ლისტების მიღება, მერე მათგან რამდენიმეს გამოყენება უფრო კარგი იქნება და დიდი დროც არ დაგჭირდება, მაქსიმუმ ერთ საათში მორჩები.

Share this post


Link to post
Share on other sites

განვავრცობ: ვქმნით WCF სერვისს და დავჰოსტავთ ვებ აპლიკაციაში, თუმცა მისი ჰოსტი შეიძლება იყოს IIS ან ნებისმიერი ტიპის აპლიკაცია, შექმნილი .NET - ში (Console, WinForms, Web, WPF და ა.შ.).

 

1. გავხსნათ Visual Studio და შევქმნათ Class Library პროექტი:

4960f7bb8053.jpg

 

2. წავშალოთ კლასი Class1.cs:

c3fb174e9e60.png

 

3. დავამატოთ WCF Service კლასი, რომელიც დაგვიგენერირებს ერთ ინტერფეისს და კლასს:

cc27370bd88d.png

 

4. ასეთი სახე ექნება, სადაც References - ში აუცილებელია და ჩაჯდება System.ServiceMdodel:

6532dd6d1de7.png

 

5. ჩვენი ინტერფეისი და კლასი ასე გამოიყურება:

 

ინტერფეისი:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFTestService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ITestService" in both code and config file together.
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        void DoWork();
    }
}

კლასი:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFTestService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "TestService" in both code and config file together.
    public class TestService : ITestService
    {
        public void DoWork()
        {
        }
    }
}

6. ავტომატურად დააგენერირა ინტერფეისი და მეთოდი, ჩვეულებრივ შეგვიძლია ჩვენი რამდენიმე მეთოდი გვქონდეს, მაგ: სატესტოდ შევცვლი ამ მეთოდს და დავამატებ კიდევ ერთს:

 

ინტერფეისი:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFTestService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ITestService" in both code and config file together.
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        string DoWork();

        [OperationContract]
        string GetMessage(string name);
    }
}

კლასი:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFTestService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "TestService" in both code and config file together.
    public class TestService : ITestService
    {
        public string DoWork()
        {
            return "Hello Scripts.Ge";
        }


        public string GetMessage(string name)
        {
            return string.Format("I am {0}", name);
        }
    }
}

ყურადღება მიაქციეთ  [serviceContract] და [OperationContract] ატრიბუტებს, ყოველი ახალი ინტერფეისის და მეთოდის დამატებისას ესენი აუცილებელია, თუ მაგალითად გვაქ კლასი, მისი ატრიბუტი იქნება [DataContract], ხოლო კლასის ველის ან ფროფერთის შემთხვევაში [DataMember].

 

 

7. სოლუშენში ვამატებთ ახალ ცარიელ ASP.NET Empty Web Application პროექტს:

0d717def9a62.jpg

 

ad8faf717587.jpg

 

8. ახალ დამატებულ პროექტში დავამატოთ ჩვენი სერვისის ლოგიკის Reference:

09e0a2a3dcba.jpg

 

4c88f5d3faf9.jpg

 

9. ვებ პროექტი გავხადოთ Startup, რომ გაშვების დროს გაეშვას როგორც ზირითადი:

163669285464.jpg

 

10. ვებ პროექტში დავამატოთ WCF Service (.svc) სერვისის ფაილი და წავშალოთ ინტერფეისი რასაც დააგენერირებს, ჩვენ შემთხვევაში ITestService.cs და ასევე TestService.svc.cs ფაილიც მივაშალოთ:

9962efab2a89.jpg

 

221e0901a96e.png

 

11. TestService.svc დავარედაქტიროთ და მივცეთ შემდეგი სახე:

<%@ ServiceHost Language="C#" Debug="true" Service="WCFTestService.TestService"%>

სადაც Service = "კლას ლაიბრერის მთავარი კლასის ინტერფეისი.კლას ლაიბრერის მთავარი კლასის სახელი" ჩვენი კლას ლაიბრერი პროექტიდან, რომელშიც სერვისის ლოგიკაა დაწერილი.

 

12. გავუშვათ პროექტი და მისამართში ჩავუწეროთ: http://localhost:3147/TestService.svc აქ პორტი სხვა იქნება თქვენ კომპიუტერზე, დასრულებულ და გაშვებულ სერვისს ექნება შემდეგი სახე:

649ae96791c3.jpg

მისი WSDL:

542225c44184.jpg

 

სერვისის შექმნა ასე დასრულდა, ახლა კი მისი გამოყენება ვცადოთ და ზემოთ აღნიშნული კოდის ნაწყვეტით ვნახოთ თუ რა მეთოდებს გვთავაზობს:

1. სატესტოდ შევქმნათ ერთი Console Application:

2. მასში დავამატოთ Service Reference:

1740c824f1df.jpg

 

3. მისამართში მივუთითოთ ჩვენი გაშვებული სერვისის მისამართი (სერვისი უნდა იყოს გაშვებული):

92e5780439bf.png

 

4. სერვისის მიერ შემოთავაზებული მეთოდები:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using InvokeTestService.ServiceReference1;
using System.Reflection;

namespace InvokeTestService
{
    class Program
    {
        static void Main(string[] args)
        {
            TestServiceClient client = new TestServiceClient();
            List<string> methodNames = new List<string>();
            MethodInfo[] methods = client.GetType().GetMethods();
            methods.ToList().ForEach(m => methodNames.Add(string.Format("{0}()", m.Name)));

            methodNames.ForEach(mn => Console.WriteLine(mn));
        }
    }
}

შედეგი:

430390d4e167.jpg

აქ პირველი ორი მეთოდი შვენი შექმნილია, დანარჩენი სტანდარტული მეთოდებია.

 

 

 

5. დავტესტოთ ჩვენ მიერ სექმნილი ორივე მეთოდი:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using InvokeTestService.ServiceReference1;
using System.Reflection;

namespace InvokeTestService
{
    class Program
    {
        static void Main(string[] args)
        {
            TestServiceClient client = new TestServiceClient();
            //List<string> methodNames = new List<string>();
            //MethodInfo[] methods = client.GetType().GetMethods();
            //methods.ToList().ForEach(m => methodNames.Add(string.Format("{0}()", m.Name)));

            //methodNames.ForEach(mn => Console.WriteLine(mn));

            Console.WriteLine(client.DoWork());
            Console.WriteLine(client.GetMessage("BERU"));
        }
    }
}

შედეგი:

9143a72fb313.jpg

  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×