2016-04-01 12 views
11

हमें सिग्नलआर के साथ कोई समस्या है। हमारे पास नीलामी साइट है जो रीयल टाइम बोली-प्रक्रिया के लिए सिग्नलर पर चलती है। हमने ब्राउज़र के साथ कुछ मुद्दों को ठीक किया और सबकुछ अच्छी तरह से काम कर रहा था। फिर हमने अपने सर्वर पर नया अवशेष स्थापित किया और देखा कि सिग्नल कनेक्ट पर दो मिनट हमें http त्रुटि कोड 400 मिल रहा है, पुनः कनेक्ट करें और निरस्त करें। यहाँ एक स्क्रीनशॉट:सिग्नलआर सर्वर पर खराब अनुरोध 400 का कारण बनता है

New Relic Data

SignalR कनेक्ट करने और फिर से कनेक्ट सबसे अधिक समय लेने वाली साइट के संचालन नई अवशेष के अनुसार कर रहे हैं।

यहाँ SignalR बैकएंड कोड है (हम signalr बैकप्लेन के रूप में एसक्यूएल सर्वर का उपयोग):

public class SignalRHub : Hub 
{ 
    public void BroadCastMessage(String msg) 
    { 
     var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>(); 

     hubContext.Clients.All.receiveMessage(msg); 
    } 
} 

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     string appString=string.Empty; 

     //Gets the connection string. 
     if (System.Configuration.ConfigurationSettings.AppSettings["SignaRScaleoutConn"] != null) 
     { 
      appString = System.Configuration.ConfigurationSettings.AppSettings["SignaRScaleoutConn"].ToString(); 
     } 

     GlobalHost.DependencyResolver.UseSqlServer(appString); 
     GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMinutes(15); //I added this timeout, but it is not required. 
     app.MapSignalR(); 
    } 
} 

जावास्क्रिप्ट ग्राहक इस तरह दिखता है, यह लंबा है, लेकिन इसमें से अधिकांश jQuery डोम पर पड़ता है तो मैं इसे शामिल अगर सब कुछ गलत हो तो सब कुछ हो सकता है।

$(function() { 

      var chatProxy = $.connection.signalRHub; 

      $.connection.hub.start(); 

      chatProxy.client.receiveMessage = function (msg) { 

       var all = $(".soon").map(function() { 

        var hiddenModelId = $("#hiddenListingId"); 

        if (msg == hiddenModelId.val()) { 

         $.ajax({ 
          async: "true", 
          url: "/Listing/AuctionRemainingTime", 
          type: "POST", 
          dataType: 'json', 
          data: '{ "listingID": "' + msg + '"}', 
          contentType: "application/json; charset=utf-8", 
          success: function (data) { 
           if (data != null) { 

            SoonSettings.HasReloadedThisTick = false; 

            var element = document.getElementById(msg); 

            var obj = JSON.parse(data) 

            // For Clock Counter End Date Time Interval 
            // Adds 2 minutes to the soon clock when bid is close to finishing. 
            var hdID = "hdn" + obj.ListingId; 
            var hdValue = $("#" + hdID); 
            if (obj.EndDate != hdValue.val()) { 

             SoonSettings.HasUpdated = false; //Allows clock to change color once it gets under two minutes. 

             $('#' + hdID).val(obj.EndDate); 
             Soon.destroy(element); 
             Soon.create(element, { //Recreates clock with the before 2 minute tick event. 
              'due': 'in ' + obj.Seconds + ' seconds', 
              'layout':'group label-uppercase', 
              'visual':'ring cap-round progressgradient-00fff6_075fff ring-width-custom gap-0', 
              'face':'text', 
              'eventTick': 'tick' 
             }); 
            } 

            var highbid = obj.HighBidderURL; 

            // For Date Ends Info. 
            var ListingEndDate = $("#tdAuctionListingEndDate"); 

            if (obj.EndDate != ListingEndDate.val()) { 
             $('#' + hdID).val(obj.EndDate); 
             ListingEndDate.text(obj.EndDate + " Eastern"); 
             ListingEndDate.effect("pulsate", { times: 5 }, 5000); 
            } 
            else 
            { 
             $(".Bidding_Current_Price").stop(true, true); ///Removes the pulsating effect. 
             $(".Bidding_Current_Price").removeAttr("style"); //Removes unnecessary attribute from HTML. 
            } 

            //Bid div notification. 
            if (obj.AcceptedActionCount.replace(/[^:]+:*/, "") > 0) { 

             if (obj.Disposition != '' && obj.Disposition != null) { 
              if (obj.Disposition == "Neutral") { 
               $("#spanNeutralBid").show(); 
               $("#divOutbidNotification").hide(); 
               $("#spanPositiveBid").hide(); 
               $("#divProxyBidNotification").hide(); 
              } 
              else if (obj.Disposition == "Positive") { 
               $("#spanPositiveBid").show(); 
               $("#divOutbidNotification").hide(); 
               $("#spanNeutralBid").hide(); 
               $("#divProxyBidNotification").hide(); 
              } 
              else if (obj.Disposition == "Negative") { 
               $("#divOutbidNotification").show(); 
               $("#spanNeutralBid").hide(); 
               $("#spanPositiveBid").hide(); 
               $("#divProxyBidNotification").hide(); 
              } 
              else { 
               $("#divOutbidNotification").hide(); 
               $("#spanNeutralBid").hide(); 
               $("#divProxyBidNotification").hide(); 
               $("#spanPositiveBid").hide();  
              } 

             } 
            } 

            // For Highlight Current Price when it is Updated 
            var hdCurrentPrice = $("#hdnCurrentPrice"); 

            if (obj.CurrentPrice != hdCurrentPrice.val()) { 

             $(".Bidding_Current_Price").text(obj.CurrentPrice); 
             $(".Bidding_Current_Price").effect("pulsate", { times: 5 }, 5000); 
             $("#hdnCurrentPrice").val(obj.CurrentPrice); 
            } 
            else { 
             $(".Bidding_Current_Price").stop(true, true); 
             $(".Bidding_Current_Price").removeAttr("style"); 
            } 

            // For ReservePrice Status 
            $("#spanReservePriceStatus").html(obj.ReservePriceStatus); 
            $("#smallReservePriceStatus").html(obj.ReservePriceStatus); 

            // For Bid Count 

            var spanBidCounter = $("#spanBidCount"); 

            $(spanBidCounter).text(obj.AcceptedActionCount); 


            var stringAppend = "<tr id='trhHighBidder'><td><strong>HighBidder</strong></td>"; 
            stringAppend += "<td>"; 
            if (obj.isAdmin == true) { 
             stringAppend += "<a id='anchorHighBid' href=" + obj.HighBidderURL + ">"; 
             stringAppend += "<span id='spanHighBidder'>" + obj.CurrentListingActionUserName + "</span>" 
             stringAppend += "</a>"; 
            } 
            else { 
             stringAppend += "<span id='spanHighBidderAnonymous'>" + obj.CurrentListingActionUserName + "</span>"; 
            } 
            stringAppend += "</td></tr>"; 

            if (obj.AcceptedActionCount.replace(/[^:]+:*/, "") > 0) { 
             if ($("#tblAuctionDetail").find("#rowHighBidder").length > 0) { 

              if ($("#tblAuctionDetail").find("#trhHighBidder").length > 0) { 
               $("#trhHighBidder").remove(); 
              } 
             } 
             else { 

              //add tr to table 
              if (!$("#tblAuctionDetail").find("#trhHighBidder").length > 0) { 
               $('#tblAuctionDetail > tbody > tr:eq(6)').after(stringAppend); 
              } 
             } 
            } 

            // For High Bidder 

            if (obj.isAdmin) { 

             var anchorElement = $("#anchorHighBid"); 
             $(anchorElement).attr("href", obj.HighBidderURL); 

             var spanHighBidder = $("#spanHighBidder"); 
             $(spanHighBidder).text(obj.CurrentListingActionUserName); 
            } 
            else { 
             var spanAdminHighBid = $("#spanHighBidderAnonymous"); 
             $(spanAdminHighBid).text(obj.CurrentListingActionUserName) 
            } 

           } 
          }, 
          error: function (xhr, textStatus, errorThrown) { 

          } 
         }); 
        } 
       }); 
      }; 

     }); 

क्या क्लाइंट या सर्वर सिग्नल कोड के साथ कुछ गड़बड़ है जिसे इन त्रुटियों से अक्सर बचने के लिए बदला जा सकता है? 400 कोड में लगभग हर मिनट दिखाने की प्रवृत्ति है। मैं सिग्नलआर के लिए बहुत नया हूं और इसके साथ प्रभावी कोड बनाने के बारे में बहुत कम जानता हूं।

साइट पर वास्तविक समय बोली-प्रक्रिया काम करती है, यह केवल इन निरंतर त्रुटियों से बचने का एक तरीका ढूंढने के लिए है। सिग्नलआर कार्यों के बारे में कुछ भी बताते हुए कोई भी मदद की सराहना की जाती है।

धन्यवाद,

+2

हमें कुछ ही त्रुटियां मिलती हैं। हम बैकप्लेन के रूप में सेवाबस का उपयोग करते हैं। मुझे लगता है कि यह बैकप्लेन और लोडबलंसर से संबंधित है। क्या आपके पास लोडबैंसर या ऑटोस्कलिंग है? –

+0

हमारे पास लोड बैलेंसर है, दिलचस्प है। मैंने इस मुद्दे के कारण इस बारे में सोचा नहीं था। –

+0

"खराब अनुरोध" प्रतिक्रिया के शरीर में क्या है? –

उत्तर

1

मैं SignalR के परिवहन माध्यम बदलने के आजमाइए चाहते हैं: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#transport और देखें कि क्या समस्या बनी रहती है।

यदि खराब अनुरोध लॉग से UserAgent प्राप्त करना संभव है, तो कम से कम ब्राउज़र को 400 त्रुटि प्राप्त करने की कोशिश करें। मुझे लगता है, शायद, कुछ ब्राउज़र सही परिवहन विधि से कनेक्ट नहीं हो रहे हैं।

संबंधित मुद्दे