مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

آموزشگاه برنامه نویسان

مشکل در اجرای SignalR

یکشنبه, 29 مرداد 1396 17:39

مشکل در اجرای SignalR

سلام 

من میخوام با استفاده از Signalr در عملیات هایی که بصورت Ajax است مقدار پیشرفت رو نشون بدم

خوب من قسمت سرور رو پیاده  کردم 

کنترلر :

public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult TestProcess(string ConID)
        {
            ChatHubs CH = new ChatHubs();
            
            CH.ProcessedValue("20", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("30", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("40", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("50", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("70", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("90", ConID);
            Thread.Sleep(2000);

            CH.ProcessedValue("100", ConID);
            Thread.Sleep(2000);

            return Json("");
        }
    }

هاب 

public class ChatHubs : Hub
    {
        public void ProcessedValue(string Value,string ConectionID)
        {
            var ctx = GlobalHost.ConnectionManager.GetHubContext<ChatHubs>();
            ctx.Clients.Client(ConectionID).processValue(Value);
            //ctx.Clients.All.perocessValue(Value);
        }
    }

ویو :


<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-3.1.1.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    <script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
    <script src="~/Signalr/hubs"></script>
</head>
<body>
    <div> 
        <label id="CnId"></label>
        @using (Ajax.BeginForm("TestProcess", "Home", new AjaxOptions { Url = "/home/TestProcess", HttpMethod = "Post" }))
        {
            <input id="CnIdHiden" type="hidden" name="ConID"/>
            <input type="submit" />
        }
        
        <div>
            <p>درصد انجام شده</p>
            <div id="bar">0</div>
        </div>
    </div>
    <script>
        $(function () {
            var Process = $.connection.ChatHubs;
            Process.client.processValue = function (value) {
                $("#bar").html(value);
            };
            $.connection.hub.start().done(function (){
                var myClientId = $.connection.hub.id;
                $("#CnId").html($.connection.hub.id);
                $("#CnIdHiden").val($.connection.hub.id)
            });
        });
    </script>
</body>
</html>

خوب سمت سرور مشکلی ندارم 

ولی در ویو کد های جاوااسکریپت بدرستی اجرا نمیشه

<script>
        $(function () {
            var Process = $.connection.ChatHubs;
            Process.client.processValue = function (value) {
                $("#bar").html(value);
            };
            $.connection.hub.start().done(function (){
                var myClientId = $.connection.hub.id;
                $("#CnId").html($.connection.hub.id);
                $("#CnIdHiden").val($.connection.hub.id)
            });
        });
    </script>


قبلا کد به اینصورت بوده 

<script>
        $(function () {
            var Process = $.connection.ChatHubs;

            $.connection.hub.start().done(function (){
                var myClientId = $.connection.hub.id;
                $("#CnId").html($.connection.hub.id);
                $("#CnIdHiden").val($.connection.hub.id)
            });

            Process.client.processValue = function (value) {
                $("#bar").html(value);
            };

        });

و کانکشن آیدی رو در لیبل و فیلد قرار میداد و کار میکرد ولی چیزی رو زمانی که از سرور متد فراخوانی میشد ویو تغییری نمیکرد  

من متوجه شدم که قسمت مربوط به متدی که باید اجرا شود (در جاوااسکریپت)  تا ویو را تغییر دهد اجرا نمیشه ...

حالا من کد را جابجا کردم (به شکلی که ابتدا قرار دادم) و الان دیگه کانکشن آیدی نیز به لیبل و فیلد نمیده و زمانی که فرم را ارسال کنید کانکشن آیدی Null ارسال میشود

پس صد در صد مشکل در 

            Process.client.processValue = function (value) {
                $("#bar").html(value);
            };

است

مشکل رو چجوری حل کنم؟

خیلی طولانی شد ... ببخشید

آکادمی برنامه نویسان تلگرام برنامه نویسان
دوشنبه, 30 مرداد 1396 09:41

نقل قول : مشکل در اجرای SignalR

متاسفانه نمیشه اینطوری مشکل رو پیدا کرد

باید کدتون رو Trace کنید

این لینک رو ببینید

کسانی که از این پست تشکر کرده اند :

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید