আমি কি সিগন্যালআর এবং একটি রেস্টস্টুল এপিআই উভয়কে অন্তর্ভুক্ত করতে পারি?


116

আমার এএসপি.এনইটি ব্যবহার করে একটি একক পৃষ্ঠার ওয়েব অ্যাপ্লিকেশন তৈরি হয়েছে। আমি সম্প্রতি সিগন্যালআর লাইব্রেরিটি ব্যবহার করে প্রচুর ওয়েব পদ্ধতিগুলিকে ধাক্কা ভিত্তিক রূপান্তরিত করেছি । এটি সত্যিই পৃষ্ঠটিকে যথেষ্ট পরিমাণে বাড়িয়েছে এবং পৃষ্ঠা থেকে সার্ভারের প্রচুর কলকে হ্রাস করেছে।

একই সময়ে, আমি সার্ভার-সাইডের কয়েকটি পদ্ধতির জন্য রেস্টলফুল এএসপি.নেট ওয়েবএপিআইয়ের দিকেও তাকিয়ে ছিলাম, আসল সৌন্দর্য হ'ল এটি একই সাথে বাহ্যিক অ্যাপ্লিকেশনগুলির জন্য একটি API তৈরি করতে দেয় যা আমি বিকাশ করি কোর অ্যাপ্লিকেশন (যা আমি করছি তার জন্য গুরুত্বপূর্ণ হবে)।

তবে এটি বেশ কয়েকটি নিবন্ধ এবং এই দুটি প্রশ্নের সন্ধানের পরে মনে হচ্ছে, সেই ধাক্কা এবং ওয়েবএপিআই পদ্ধতিগুলি ক্লায়েন্ট-সার্ভার যোগাযোগের জন্য সম্পূর্ণ দুটি পৃথক দৃষ্টান্তের মতো বলে মনে হচ্ছে। আমি নিশ্চিত যে আমি প্রোটোকলের মাধ্যমে অ্যাক্সেসযোগ্য বিভিন্ন পদ্ধতি তৈরি করতে পারি তবে আমি নিশ্চিত নই যে এর মধ্যে যদি সমস্যাগুলি রয়েছে বা যদি এটি ম্লান হিসাবে বিবেচিত হয় - তবে আমি কী লক্ষ্য করছি তা অর্জনের জন্য আরও একটি মার্জিত উপায় থাকতে পারে জন্য।

অবশ্যই এমন পরিস্থিতি রয়েছে যেখানে আমি চাই চাই যে RESTful WebAPI একটি সিগন্যাল হাবের মাধ্যমে ইভেন্টগুলি সম্প্রচার করুক ... বিপরীত (সিগন্যালআর যা কখনও ওয়েবএপিআইতে অ্যাক্সেস করার প্রয়োজন হয়) খুব কম বলে মনে হয়, তবে আমি মনে করি এখনও সম্ভব।

কেউ কি এই কাজ করেছে? কারও কাছে কীভাবে এগিয়ে যেতে হবে সে সম্পর্কে কোনও পরামর্শ বা টিপস রয়েছে? এখানে সবচেয়ে মার্জিত উপায় কি হবে?


4
এই ব্লগ পোস্ট থেকে ভিডিও একবার দেখুন । এটি কীভাবে আপনি সিগন্যালআর দিয়ে ওয়েবএপিআই ব্যবহার করতে পারবেন তা ব্যাখ্যা করে।
ডেভিড.স

@ ডেভিড.এস, এই ভিডির মাধ্যমে সাঁতার কাটা, এটি নিখুঁত দেখাচ্ছে। উত্তর হিসাবে পোস্ট করুন এবং আমি এটি চিহ্নিত করব।
mbeasley

উত্তর:


85

এই ব্লগ পোস্ট থেকে ভিডিও একবার দেখুন । এটি কীভাবে আপনি সিগন্যালআর দিয়ে ওয়েবএপিআই ব্যবহার করতে পারবেন তা ব্যাখ্যা করে।

মূলত, ওয়েব এপিআই + সিগন্যালআর ইন্টিগ্রেশন এই শ্রেণিতে অন্তর্ভুক্ত :

public abstract class ApiControllerWithHub<THub> : ApiController
    where THub : IHub
{
    Lazy<IHubContext> hub = new Lazy<IHubContext>(
        () => GlobalHost.ConnectionManager.GetHubContext<THub>()
    );

    protected IHubContext Hub
    {
        get { return hub.Value; }
    }
}

এখানেই শেষ. :)


43
এএসপি.এনইটি ওয়েব এপিআই-তে সিগন্যাল যুক্ত করার জন্য, ভিডিওটিকে সময়মতো ফরোয়ার্ড করুন 33:35।
বাইটফায়ার

ভিডিওটি এইচটিটিপিএসের উপরে লোড হয় না, এইচটিটিপিএসকে জোর করার জন্য আপনার যদি একটি ব্রাউজার প্লাগইন থাকে তবে আপনাকে এটি অক্ষম করতে হবে
জেএমকে

14
@ বাইটফায়ার: আসলে, ওয়েব এপিআই + সিগন্যালআর ইন্টিগ্রেশন প্রায় শুরু হয়। 55 মিনিটে
ডেনিস

2
@ ডেভিডস.এস: আমি জানি, আমি একটু দেরি করেছি, তবে লিঙ্কটির জন্য ধন্যবাদ। আমি আরও পাঠকদের জন্য একটি অংশ যোগ করেছি।
ডেনিস

1
আইপ্যাবইল্ডার নেই? ম্যাপসাইনালআর ()?
জোশ সটারফিল্ড

18

সিগন্যালআরটি ইতিমধ্যে WebAPI উত্স vNext (4.1) এ অন্তর্ভুক্ত।

আপনি যদি আরটিএম বিল্ড না ব্যবহার করেন, তবে কোডপ্লেক্সটি বন্ধ করে দখল করেন, আপনি দেখতে পাচ্ছেন সেখানে একটি নতুন প্রকল্প রয়েছে যার নাম System.Web.Http.SignalRআপনি ব্যবহার করতে পারেন। এটি বেশ কয়েকদিন আগে এই প্রতিশ্রুতি দিয়ে যুক্ত হয়েছিল - http://aspnetwebstack.codeplex.com/SourceControl/ بدلset / 7605afebb159

নমুনা ব্যবহার (প্রতিশ্রুতি হিসাবে উল্লিখিত):

public class ToDoListController : HubController<ToDoListHub>
{
    private static List<string> _items = new List<string>();

    public IEnumerable<string> Get()
    {
        return _items;
    }

    public void Post([FromBody]string item)
    {
        _items.Add(item);
        // Call add on SignalR clients listening to the ToDoListHub
        Clients.add(item);
    }
}

আপনি যদি এখনই ভিএনেক্স্টে স্যুইচ করতে না চান তবে আপনি সর্বদা কেবল কোডটি রেফারেন্সের জন্য ব্যবহার করতে পারেন।

এই বাস্তবায়নটি ব্রড উইলসন এনডিসি অসলোতে যা দেখিয়েছিল তার সাথে (কিছুটা বেশি পালিশ করা, পরীক্ষাগুলি অন্তর্ভুক্ত) খুব অনুরূপ - http://vimeo.com/43603472


4
আমি সার্ভারে এটি করেছি। কিন্তু ক্লায়েন্ট সংযোগ করতে পারবেন না। আপনি কি জানেন কীভাবে উপরে বর্ণিত সার্ভারের সাথে একটি .NET ক্লায়েন্টকে সংযুক্ত করতে হয়?
বাইটফায়ার

3
আমি ওয়েব এপিআই 5.2.3 এবং সিগন্যালআর 2.2.1 ব্যবহার করছি এবং এই শ্রেণিটি কোথাও খুঁজে পাওয়া যায় না। কেউ কি ইতিহাস জানে? এটি আরটিএম এর আগে ইয়াঙ্কড ছিল? শেষ পর্যন্ত, আমি কেবল ডেভিড.এস এর ক্লাস সংজ্ঞাটি অনুলিপি করেছি, তবে আমি কী আগ্রহী তা জানতে আগ্রহী।
কলিন

1
@ 40 আলফা - আমার মনে হয় আমরা কেবলমাত্র হাবের স্থিতিশীল পদ্ধতিগুলি শেষ করেছি যা গ্লোবালহস্ট.কনেকশন ম্যানেজার.গেটহাব কনটেক্সট () বা এএসপি.নেট কোর সমতুল্য) ব্যবহার করেছে এবং API কন্ট্রোলার থেকে স্ট্যাটিক পদ্ধতিগুলি কল করেছিলাম।
কলিন

3

এখানে দুটি প্রযুক্তির সংমিশ্রণ দেখানো একটি ভিডিও রয়েছে http://channel9.msdn.com/Events/TechDays/Belgium-2013/25 এবং এখানে ইন্টিগ্রেশন https://www.nuget.org/ এর জন্য একটি নিউগেট প্যাকেজ রয়েছে প্যাকেজ / Microsoft.AspNet.WebApi.SignalR /


2
ওয়েব এপিআই অ্যাপ্লিকেশন সহ কোড চুক্তিগুলি ব্যবহার করার সময়, এই প্যাকেজটি এখন ভেঙে গেছে, কারণ এটি অ-জেনেরিক প্রয়োজন IHubConnectionContext, যা এটি দ্বারা প্রতিস্থাপিত হয়েছিল IHubConnectionContext<T>। গৃহীত উত্তর হ'ল উপায়।
ডেনিস

যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান। এটি সংশোধন করার জন্য দয়া করে আপনার উত্তরটি সম্পাদনা করুন, তারপরে মুছে ফেলার অনুরোধ করতে আপনার পোস্টটিকে পতাকাঙ্কিত করুন
ম্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.