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

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

مشکل در اجرای 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

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

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

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

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

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