ASP.NET SignalR hub 'Ları API Kılavuzu-JavaScript IstemcisiASP.NET SignalR Hubs API Guide - JavaScript Client

Warning

Bu belge, SignalR 'nin en son sürümü için değildir.This documentation isn't for the latest version of SignalR. ASP.NET Core SignalR'ye göz atın.Take a look at ASP.NET Core SignalR.

Bu belgede, browsers ve Windows Mağazası (WinJS) uygulamaları gibi JavaScript istemcilerinde SignalR sürüm 2 için hub API 'sinin kullanılmasına bir giriş sunulmaktadır.This document provides an introduction to using the Hubs API for SignalR version 2 in JavaScript clients, such as browsers and Windows Store (WinJS) applications.

SignalR hub 'Ları API 'SI, uzak yordam çağrılarını (RPC) bir sunucudan, istemcilerden ve istemcilerden sunucuya bağlı hale getirmenizi sağlar.The SignalR Hubs API enables you to make remote procedure calls (RPCs) from a server to connected clients and from clients to the server. Sunucu kodu ' nda, istemciler tarafından çağrılabilen Yöntemler tanımlar ve istemcide çalışan yöntemleri çağırabilirsiniz.In server code, you define methods that can be called by clients, and you call methods that run on the client. İstemci kodunda, sunucudan çağrılabilen yöntemleri tanımlayabilir ve sunucuda çalışan yöntemleri çağırabilirsiniz.In client code, you define methods that can be called from the server, and you call methods that run on the server. SignalR, sizin için istemciden sunucuya sıhhi kını ele alır.SignalR takes care of all of the client-to-server plumbing for you.

SignalR Ayrıca kalıcı bağlantılar adlı alt düzey bir API sunar.SignalR also offers a lower-level API called Persistent Connections. SignalR, hub 'Lar ve kalıcı bağlantılara giriş için bkz. SignalR 'ye giriş.For an introduction to SignalR, Hubs, and Persistent Connections, see Introduction to SignalR.

Bu konuda kullanılan yazılım sürümleriSoftware versions used in this topic

Bu konunun önceki sürümleriPrevious versions of this topic

SignalR 'nin önceki sürümleri hakkında daha fazla bilgi için bkz. SignalR daha eski sürümleri.For information about earlier versions of SignalR, see SignalR Older Versions.

Sorular ve açıklamalarQuestions and comments

Lütfen bu öğreticiyi nasıl beğentireceğiniz ve sayfanın en altındaki açıklamalarda İyileştiğimiz hakkında geri bildirimde bulunun.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa, bunları ASP.NET SignalR forumuna veya StackOverflow.com'e gönderebilirsiniz.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

Genel BakışOverview

Bu belgede aşağıdaki bölümler yer alır:This document contains the following sections:

Sunucu veya .NET istemcilerini programlama hakkında belgeler için aşağıdaki kaynaklara bakın:For documentation on how to program the server or .NET clients, see the following resources:

SignalR 2 sunucu bileşeni yalnızca .NET 4,5 ' de kullanılabilir (ancak .NET 4,0 ' de SignalR 2 için bir .NET istemcisi vardır).The SignalR 2 server component is only available on .NET 4.5 (though there is a .NET client for SignalR 2 on .NET 4.0).

Oluşturulan ara sunucu ve sizin için ne yaparThe generated proxy and what it does for you

Bir JavaScript istemcisini, bir SignalR hizmeti ile iletişim kurmak için, SignalR 'nin sizin için oluşturduğu bir ara sunucu olmadan veya olmadan iletişim kurmaya programlayabilirsiniz.You can program a JavaScript client to communicate with a SignalR service with or without a proxy that SignalR generates for you. Proxy 'nin ne için yaptığı, bağlanmak için kullandığınız kodun sözdizimini basitleştirecek, sunucunun çağırdığı yöntemleri yazacak ve sunucuda Yöntemler çağıracaklarınız.What the proxy does for you is simplify the syntax of the code you use to connect, write methods that the server calls, and call methods on the server.

Sunucu yöntemlerini çağırmak için kod yazdığınızda, oluşturulan ara sunucu, yerel bir işlev yürütüyorsunuz gibi görünen sözdizimini kullanmanıza olanak sağlar: serverMethod(arg1, arg2) yerine yazabilirsiniz invoke('serverMethod', arg1, arg2) .When you write code to call server methods, the generated proxy enables you to use syntax that looks as though you were executing a local function: you can write serverMethod(arg1, arg2) instead of invoke('serverMethod', arg1, arg2). Oluşturulan proxy sözdizimi, bir sunucu yöntemi adını yanlış yazdığınız takdirde anında ve okunaklı bir istemci tarafı hatası da sunar.The generated proxy syntax also enables an immediate and intelligible client-side error if you mistype a server method name. Proxy 'leri tanımlayan dosyayı el ile oluşturursanız, sunucu yöntemlerini çağıran kod yazmak için IntelliSense desteği de alabilirsiniz.And if you manually create the file that defines the proxies, you can also get IntelliSense support for writing code that calls server methods.

Örneğin, sunucusunda aşağıdaki hub sınıfına sahip olduğunuzu varsayalım:For example, suppose you have the following Hub class on the server:

public class ContosoChatHub : Hub
{
    public void NewContosoChatMessage(string name, string message)
    {
        Clients.All.addContosoChatMessageToPage(name, message);
    }
}

Aşağıdaki kod örnekleri, NewContosoChatMessage sunucuda yöntemini çağırmak ve yöntemin sunucudan çağrılması Için JavaScript kodunun nasıl göründüğünü gösterir addContosoChatMessageToPage .The following code examples show what JavaScript code looks like for invoking the NewContosoChatMessage method on the server and receiving invocations of the addContosoChatMessageToPage method from the server.

Oluşturulan ara sunucu ileWith the generated proxy

var contosoChatHubProxy = $.connection.contosoChatHub;
contosoChatHubProxy.client.addContosoChatMessageToPage = function (name, message) {
    console.log(name + ' ' + message);
};
$.connection.hub.start().done(function () {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
         contosoChatHubProxy.server.newContosoChatMessage($('#displayname').val(), $('#message').val());
         $('#message').val('').focus();
     });
});

Oluşturulan proxy olmadanWithout the generated proxy

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(name, message) {
    console.log(name + ' ' + message);
});
connection.start().done(function() {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
        contosoChatHubProxy.invoke('newContosoChatMessage', $('#displayname').val(), $('#message').val());
        $('#message').val('').focus();
                });
    });

Oluşturulan ara sunucu ne zaman kullanılır?When to use the generated proxy

Sunucunun çağırdığı bir istemci yöntemi için birden çok olay işleyicisini kaydetmek istiyorsanız, oluşturulan proxy 'yi kullanamazsınız.If you want to register multiple event handlers for a client method that the server calls, you can't use the generated proxy. Aksi takdirde, oluşturulan proxy 'yi kullanmayı seçebilirsiniz veya kodlama tercihinizi temel alan değil ' i seçebilirsiniz.Otherwise, you can choose to use the generated proxy or not based on your coding preference. Kullanmayı tercih ederseniz, istemci kodunuzda bir öğe içinde "SignalR/hub 'lar" URL 'sine başvurmanız gerekmez script .If you choose not to use it, you don't have to reference the "signalr/hubs" URL in a script element in your client code.

İstemci kurulumuClient setup

JavaScript istemcisi jQuery ve SignalR Core JavaScript dosyasına başvurular gerektirir.A JavaScript client requires references to jQuery and the SignalR core JavaScript file. JQuery sürümü 1.6.4 veya 1.7.2, 1.8.2 veya 1.9.1 gibi büyük bir sonraki sürüm olmalıdır.The jQuery version must be 1.6.4 or major later versions, such as 1.7.2, 1.8.2, or 1.9.1. Oluşturulan proxy 'yi kullanmaya karar verirseniz, SignalR tarafından oluşturulan ara sunucu JavaScript dosyası için de bir başvuruya ihtiyacınız vardır.If you decide to use the generated proxy, you also need a reference to the SignalR generated proxy JavaScript file. Aşağıdaki örnek, başvuruların oluşturulan proxy 'yi kullanan bir HTML sayfasında nasıl görünebileceğini gösterir.The following example shows what the references might look like in an HTML page that uses the generated proxy.

<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/jquery.signalR-2.1.0.min.js"></script>
<script src="signalr/hubs"></script>

Bu başvuruların bu sıraya dahil edilmesi gerekir: öncelikle jQuery, SignalR Core ve SignalR proxy 'lerinin son.These references must be included in this order: jQuery first, SignalR core after that, and SignalR proxies last.

Dinamik olarak oluşturulan ara sunucuya başvurmaHow to reference the dynamically generated proxy

Yukarıdaki örnekte, SignalR tarafından oluşturulan proxy 'nin başvurusu, fiziksel bir dosyaya değil, dinamik olarak oluşturulan JavaScript koduna sahiptir.In the preceding example, the reference to the SignalR generated proxy is to dynamically generated JavaScript code, not to a physical file. SignalR, anında ara sunucu için JavaScript kodunu oluşturur ve "/SignalR/Hub" URL 'sine yanıt olarak istemciye hizmet verir.SignalR creates the JavaScript code for the proxy on the fly and serves it to the client in response to the "/signalr/hubs" URL. Yöntemdeki sunucuda SignalR bağlantıları için farklı bir temel URL belirttiyseniz MapSignalR , dinamik olarak oluşturulan ara sunucu dosyasının URL 'si, "/Hub" a eklenmiş olan özel URL 'niz olur.If you specified a different base URL for SignalR connections on the server in your MapSignalR method, the URL for the dynamically generated proxy file is your custom URL with "/hubs" appended to it.

Note

Windows 8 (Windows Mağazası) JavaScript istemcileri için, dinamik olarak oluşturulan bir yerine fiziksel proxy dosyasını kullanın.For Windows 8 (Windows Store) JavaScript clients, use the physical proxy file instead of the dynamically generated one. Daha fazla bilgi için, bu konunun ilerleyen bölümlerinde SignalR tarafından oluşturulan ara sunucu için fiziksel bir dosya oluşturma konusuna bakın.For more information, see How to create a physical file for the SignalR generated proxy later in this topic.

Bir ASP.NET MVC 4 veya 5 Razor görünümünde, proxy dosyası başvurunuz içindeki uygulama köküne başvurmak için tilde kullanın:In an ASP.NET MVC 4 or 5 Razor view, use the tilde to refer to the application root in your proxy file reference:

<script src="~/signalr/hubs"></script>

MVC 5 ' te SignalR kullanma hakkında daha fazla bilgi için bkz. SignalR ve MVC 5 Ile çalışmayabaşlama.For more information about using SignalR in MVC 5, see Getting Started with SignalR and MVC 5.

Bir ASP.NET MVC 3 Razor görünümünde, Url.Content proxy dosyası başvurunuz için kullanın:In an ASP.NET MVC 3 Razor view, use Url.Content for your proxy file reference:

<script src="@Url.Content("~/signalr/hubs")"></script>

Bir ASP.NET Web Forms uygulamasında, ResolveClientUrl proxy dosyası başvurunuz için kullanın veya uygulama kökü göreli yolunu (tilde ile başlayarak) kullanarak ScriptManager aracılığıyla kaydedin:In an ASP.NET Web Forms application, use ResolveClientUrl for your proxies file reference or register it via the ScriptManager using an app root relative path (starting with a tilde):

<script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>

Genel bir kural olarak, CSS veya JavaScript dosyaları için kullandığınız "/SignalR/Hub" URL 'sini belirtmek için aynı yöntemi kullanın.As a general rule, use the same method for specifying the "/signalr/hubs" URL that you use for CSS or JavaScript files. Bir URL 'YI bir tilde kullanmadan belirtirseniz, bazı senaryolarda uygulamanız IIS Express kullanarak Visual Studio 'da test ettiğinizde doğru çalışacaktır ancak tam IIS 'e dağıtırken 404 hatasıyla başarısız olur.If you specify a URL without using a tilde, in some scenarios your application will work correctly when you test in Visual Studio using IIS Express but will fail with a 404 error when you deploy to full IIS. Daha fazla bilgi için, MSDN sitesindeki ASP.NET Web projeleri Için Visual Studio 'Daki Web sunucularındaki Root-Level kaynaklarına yönelik başvuruları çözme konusuna bakın.For more information, see Resolving References to Root-Level Resources in Web Servers in Visual Studio for ASP.NET Web Projects on the MSDN site.

Visual Studio 2017 ' de bir Web projesini hata ayıklama modunda çalıştırdığınızda ve tarayıcınız olarak Internet Explorer kullanıyorsanız, proxy dosyasını betikleraltında Çözüm Gezgini görebilirsiniz.When you run a web project in Visual Studio 2017 in debug mode, and if you use Internet Explorer as your browser, you can see the proxy file in Solution Explorer under Scripts.

Dosyanın içeriğini görmek için hub 'laraçift tıklayın.To see the contents of the file, double-click hubs. Visual Studio 2012 veya 2013 ve Internet Explorer kullanmıyorsanız veya hata ayıklama modunda değilseniz, "/SignalR/Hub" URL 'sine giderek dosyanın içeriğini de alabilirsiniz.If you are not using Visual Studio 2012 or 2013 and Internet Explorer, or if you are not in debug mode, you can also get the contents of the file by browsing to the "/signalR/hubs" URL. Örneğin, siteniz adresinde çalışıyorsa http://localhost:56699 http://localhost:56699/SignalR/hubs tarayıcınıza gidin.For example, if your site is running at http://localhost:56699, go to http://localhost:56699/SignalR/hubs in your browser.

SignalR tarafından oluşturulan ara sunucu için fiziksel bir dosya oluşturmaHow to create a physical file for the SignalR generated proxy

Dinamik olarak oluşturulan ara sunucuya alternatif olarak, proxy koduna sahip ve bu dosyaya başvuran bir fiziksel dosya oluşturabilirsiniz.As an alternative to the dynamically generated proxy, you can create a physical file that has the proxy code and reference that file. Bu işlemi, önbelleğe alma veya paketleme davranışında denetim için ya da sunucu yöntemlerine yapılan çağrıları kodaktardığınızda IntelliSense 'i almak isteyebilirsiniz.You might want to do that for control over caching or bundling behavior, or to get IntelliSense when you are coding calls to server methods.

Bir proxy dosyası oluşturmak için aşağıdaki adımları gerçekleştirin:To create a proxy file, perform the following steps:

  1. Microsoft. Aspnet. SignalR. utils NuGet paketini yükler.Install the Microsoft.AspNet.SignalR.Utils NuGet package.

  2. Bir komut istemi açın ve SignalR.exe dosyasını içeren Araçlar klasörüne gidin.Open a command prompt and browse to the tools folder that contains the SignalR.exe file. Araçlar klasörü şu konumdadır:The tools folder is at the following location:

    [your solution folder]\packages\Microsoft.AspNet.SignalR.Utils.2.1.0\tools

  3. Aşağıdaki komutu girin:Enter the following command:

    signalr ghp /path:[path to the .dll that contains your Hub class]

    . Dll dosyanızın yolu, genellikle proje klasörünüzdeki bin klasörüdür.The path to your .dll is typically the bin folder in your project folder.

    Bu komut, signalr.exeaynı klasörde server.js adlı bir dosya oluşturur.This command creates a file named server.js in the same folder as signalr.exe.

  4. server.js dosyasını projenize uygun bir klasöre yerleştirin, uygulamanız için uygun şekilde yeniden adlandırın ve "SignalR/hub 'lar" başvurusunun yerine buna bir başvuru ekleyin.Put the server.js file in an appropriate folder in your project, rename it as appropriate for your application, and add a reference to it in place of the "signalr/hubs" reference.

Bağlantı kurmaHow to establish a connection

Bir bağlantı kurmadan önce, bir bağlantı nesnesi oluşturmanız, bir ara sunucu oluşturmanız ve sunucudan çağrılabilecek yöntemler için olay işleyicilerini kaydetmeniz gerekir.Before you can establish a connection, you have to create a connection object, create a proxy, and register event handlers for methods that can be called from the server. Proxy ve olay işleyicileri ayarlandığında, yöntemini çağırarak bağlantıyı kurun start .When the proxy and event handlers are set up, establish the connection by calling the start method.

Oluşturulan proxy 'yi kullanıyorsanız, oluşturulan proxy kodu sizin için yaptığından, bağlantı nesnesini kendi kodunuzda oluşturmanız gerekmez.If you are using the generated proxy, you don't have to create the connection object in your own code because the generated proxy code does it for you.

Bağlantı kurma (oluşturulan ara sunucu ile)Establish a connection (with the generated proxy)

var contosoChatHubProxy = $.connection.contosoChatHub;
contosoChatHubProxy.client.addContosoChatMessageToPage = function (name, message) {
    console.log(userName + ' ' + message);
};
$.connection.hub.start()
    .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
    .fail(function(){ console.log('Could not Connect!'); });

Bağlantı kurma (oluşturulan proxy olmadan)Establish a connection (without the generated proxy)

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName, message) {
    console.log(userName + ' ' + message);
});
connection.start()
    .done(function(){ console.log('Now connected, connection ID=' + connection.id); })
    .fail(function(){ console.log('Could not connect'); });

Örnek kod, SignalR hizmetinize bağlanmak için varsayılan "/SignalR" URL 'sini kullanır.The sample code uses the default "/signalr" URL to connect to your SignalR service. Farklı bir temel URL belirtme hakkında daha fazla bilgi için bkz. ASP.NET SignalR hub 'LARı API Kılavuzu-sunucu-/SignalR URL 'si.For information about how to specify a different base URL, see ASP.NET SignalR Hubs API Guide - Server - The /signalr URL.

Varsayılan olarak, hub konumu geçerli sunucusudur; farklı bir sunucuya bağlanıyorsanız, start Aşağıdaki örnekte gösterildiği gibi, yöntemini çağırmadan önce URL 'yi belirtin:By default, the hub location is the current server; if you are connecting to a different server, specify the URL before calling the start method, as shown in the following example:

$.connection.hub.url = '<yourbackendurl>;

Note

Normal olarak, start bağlantıyı kurmak için metodu çağırmadan önce olay işleyicilerini kaydedersiniz.Normally you register event handlers before calling the start method to establish the connection. Bağlantıyı kurduktan sonra bazı olay işleyicilerini kaydetmek istiyorsanız bunu yapabilirsiniz, ancak metodu çağırmadan önce olay işleyicilerden en az birini kaydetmeniz gerekir start .If you want to register some event handlers after establishing the connection, you can do that, but you must register at least one of your event handler(s) before calling the start method. Bunun bir nedeni, bir uygulamada birçok hub olabilir ancak OnConnected yalnızca birine kullanacaksanız, her hub 'da olayı tetiklemek istemezsiniz.One reason for this is that there can be many Hubs in an application, but you wouldn't want to trigger the OnConnected event on every Hub if you are only going to use to one of them. Bağlantı oluşturulduğunda, bir hub proxy üzerinde istemci yönteminin olması, SignalR 'nin olayı tetiklemesine söyleme yöntemidir OnConnected .When the connection is established, the presence of a client method on a Hub's proxy is what tells SignalR to trigger the OnConnected event. Yöntemi çağırmadan önce herhangi bir olay işleyicisini kaydetmezseniz start , Hub üzerinde Yöntemler çağırabileceksiniz, ancak hub 'ın OnConnected yöntemi çağrılmaz ve sunucudan hiçbir istemci yöntemi çağrılmaz.If you don't register any event handlers before calling the start method, you will be able to invoke methods on the Hub, but the Hub's OnConnected method won't be called and no client methods will be invoked from the server.

$. Connection. hub, $. hubConnection () tarafından oluşturulan nesnedir.$.connection.hub is the same object that $.hubConnection() creates

Örneklerden görebileceğiniz gibi, oluşturulan proxy 'yi kullandığınızda $.connection.hub bağlantı nesnesine başvurur.As you can see from the examples, when you use the generated proxy, $.connection.hub refers to the connection object. Bu, oluşturulan proxy 'yi kullanmadığınız zaman çağırarak elde ettiğiniz nesnedir $.hubConnection() .This is the same object that you get by calling $.hubConnection() when you aren't using the generated proxy. Oluşturulan proxy kodu, aşağıdaki ifadeyi yürüterek bağlantıyı sizin için oluşturur:The generated proxy code creates the connection for you by executing the following statement:

Oluşturulan proxy dosyasında bağlantı oluşturma

Oluşturulan proxy 'yi kullanırken, $.connection.hub oluşturulan proxy 'yi kullanmadığınız sırada bir bağlantı nesnesiyle yapabileceğiniz her şeyi yapabilirsiniz.When you're using the generated proxy, you can do anything with $.connection.hub that you can do with a connection object when you're not using the generated proxy.

Start yönteminin zaman uyumsuz yürütmesiAsynchronous execution of the start method

startYöntemi zaman uyumsuz olarak yürütülür.The start method executes asynchronously. , Ve gibi yöntemleri çağırarak geri çağırma işlevlerini ekleyebileceğiniz bir jQuery ertelenmiş nesnesidöndürür pipe done fail .It returns a jQuery Deferred object, which means that you can add callback functions by calling methods such as pipe, done, and fail. Bağlantı kurulduktan sonra, örneğin bir sunucu yöntemine yapılan çağrı gibi yürütmek istediğiniz kod varsa, bu kodu bir geri çağırma işlevine koyun veya bir geri çağırma işlevinden çağırın.If you have code that you want to execute after the connection is established, such as a call to a server method, put that code in a callback function or call it from a callback function. .doneGeri çağırma yöntemi, bağlantı kurulduktan sonra ve OnConnected sunucudaki olay işleyicisi yönteminde bulunan herhangi bir kodun yürütülmesi tamamlandıktan sonra yürütülür.The .done callback method is executed after the connection has been established, and after any code that you have in your OnConnected event handler method on the server finishes executing.

Yukarıdaki örnekteki "Şimdi bağlandı" ifadesini, start Yöntem çağrısından (bir geri aramada değil) sonraki kod satırı olarak yerleştirirseniz .done , console.log Aşağıdaki örnekte gösterildiği gibi, hat bağlantı oluşturulmadan önce yürütülür:If you put the "Now connected" statement from the preceding example as the next line of code after the start method call (not in a .done callback), the console.log line will execute before the connection is established, as shown in the following example:

Bağlantı kurulduktan sonra çalışan kodu yazmanın yanlış yolu

Etki alanları arası bağlantı kurmaHow to establish a cross-domain connection

Genellikle tarayıcı öğesinden bir sayfa yüklerse http://contoso.com , SignalR bağlantısı ' de aynı etki alanında olur http://contoso.com/signalr .Typically if the browser loads a page from http://contoso.com, the SignalR connection is in the same domain, at http://contoso.com/signalr. Sayfa http://contoso.com bağlantısı varsa http://fabrikam.com/signalr , etki alanları arası bağlantı olur.If the page from http://contoso.com makes a connection to http://fabrikam.com/signalr, that is a cross-domain connection. Güvenlik nedenleriyle, etki alanları arası bağlantılar varsayılan olarak devre dışıdır.For security reasons, cross-domain connections are disabled by default.

SignalR 1. x içinde, çapraz etki alanı istekleri tek bir EnableCrossDomain bayrağıyla denetlenir.In SignalR 1.x, cross domain requests were controlled by a single EnableCrossDomain flag. Bu bayrak hem JSONP hem de CORS isteklerini denetlediniz.This flag controlled both JSONP and CORS requests. Daha fazla esneklik için, tüm CORS desteği, SignalR 'nin sunucu bileşeninden kaldırılmıştır (JavaScript istemcileri tarayıcının desteklediği algılanırsa CORS 'yi yine de kullanır) ve bu senaryoları desteklemek için yeni OWıN ara yazılımı kullanılabilir hale getirilir.For greater flexibility, all CORS support has been removed from the server component of SignalR (JavaScript clients still use CORS normally if it is detected that the browser supports it), and new OWIN middleware has been made available to support these scenarios.

İstemcide JSONP gerekliyse (eski tarayıcılarda etki alanları arası istekleri desteklemek için), EnableJSONP HubConfiguration aşağıda gösterildiği gibi, nesne üzerinde ayarı yaparak açıkça etkinleştirilmesi gerekecektir true .If JSONP is required on the client (to support cross-domain requests in older browsers), it will need to be enabled explicitly by setting EnableJSONP on the HubConfiguration object to true, as shown below. JSONP, CORS 'den daha az güvenli olduğu için varsayılan olarak devre dışıdır.JSONP is disabled by default, as it is less secure than CORS.

Projenize Microsoft. Owin. CORS ekleme: Bu kitaplığı yüklemek için, Paket Yöneticisi konsolunda aşağıdaki komutu çalıştırın:Adding Microsoft.Owin.Cors to your project: To install this library, run the following command in the Package Manager Console:

Install-Package Microsoft.Owin.Cors

Bu komut, paketin 2.1.0 sürümünü projenize ekler.This command will add the 2.1.0 version of the package to your project.

UseCors çağrılıyorCalling UseCors

Aşağıdaki kod parçacığı, SignalR 2 ' de etki alanları arası bağlantıların nasıl uygulanacağını gösterir.The following code snippet demonstrates how to implement cross-domain connections in SignalR 2.

SignalR 2 ' de etki alanları arası istekleri uygulamaImplementing cross-domain requests in SignalR 2

Aşağıdaki kod, bir SignalR 2 projesinde CORS veya JSONP 'nin nasıl etkinleştirileceğini göstermektedir.The following code demonstrates how to enable CORS or JSONP in a SignalR 2 project. Bu kod örneği Map , ve RunSignalR yerıne MapSignalR , CORS ara yazılımı yalnızca cors desteği gerektiren SignalR istekleri için (içinde belirtilen yoldaki tüm trafik yerine) için çalışır MapSignalR . Eşleme, uygulamanın tamamı yerine belirli bir URL öneki için çalıştırılması gereken diğer tüm ara yazılımlar için de kullanılabilir.This code sample uses Map and RunSignalR instead of MapSignalR, so that the CORS middleware runs only for the SignalR requests that require CORS support (rather than for all traffic at the path specified in MapSignalR.) Map can also be used for any other middleware that needs to run for a specific URL prefix, rather than for the entire application.

using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;
namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
}

Note

  • jQuery.support.corsKodunuzda true olarak ayarlanmamış.Don't set jQuery.support.cors to true in your code.

    JQuery. support. CORS 'yi true olarak ayarlama

    SignalR CORS kullanımını işler.SignalR handles the use of CORS. jQuery.support.corsTrue olarak ayarlandığında JSONP 'nin TARAYıCıNıN CORS 'yi desteklediğini varsaymasına neden olduğu için JSONP devre dışı bırakılır.Setting jQuery.support.cors to true disables JSONP because it causes SignalR to assume the browser supports CORS.

  • Bir localhost URL 'sine bağlanırken, Internet Explorer 10 bir etki alanları arası bağlantıyı düşünmez, bu nedenle sunucuda etki alanları arası bağlantıları etkinleştirmemiş olsanız bile, uygulama IE 10 ile yerel olarak çalışacaktır.When you're connecting to a localhost URL, Internet Explorer 10 won't consider it a cross-domain connection, so the application will work locally with IE 10 even if you haven't enabled cross-domain connections on the server.

  • Internet Explorer 9 ile etki alanları arası bağlantıları kullanma hakkında daha fazla bilgi için Bu StackOverflow iş parçacığınabakın.For information about using cross-domain connections with Internet Explorer 9, see this StackOverflow thread.

  • Chrome ile etki alanları arası bağlantıları kullanma hakkında daha fazla bilgi için Bu StackOverflow iş parçacığınabakın.For information about using cross-domain connections with Chrome, see this StackOverflow thread.

  • Örnek kod, SignalR hizmetinize bağlanmak için varsayılan "/SignalR" URL 'sini kullanır.The sample code uses the default "/signalr" URL to connect to your SignalR service. Farklı bir temel URL belirtme hakkında daha fazla bilgi için bkz. ASP.NET SignalR hub 'LARı API Kılavuzu-sunucu-/SignalR URL 'si.For information about how to specify a different base URL, see ASP.NET SignalR Hubs API Guide - Server - The /signalr URL.

Bağlantıyı yapılandırmaHow to configure the connection

Bir bağlantı kurmadan önce sorgu dizesi parametreleri belirtebilir veya taşıma yöntemini belirtebilirsiniz.Before you establish a connection, you can specify query string parameters or specify the transport method.

Sorgu dizesi parametrelerini belirtmeHow to specify query string parameters

İstemci bağlandığı zaman sunucuya veri göndermek istiyorsanız, bağlantı nesnesine sorgu dizesi parametreleri ekleyebilirsiniz.If you want to send data to the server when the client connects, you can add query string parameters to the connection object. Aşağıdaki örneklerde, istemci kodunda bir sorgu dizesi parametresinin nasıl ayarlanacağı gösterilmektedir.The following examples show how to set a query string parameter in client code.

Start metodunu çağırmadan önce bir sorgu dizesi değeri ayarlayın (oluşturulan ara sunucu ile)Set a query string value before calling the start method (with the generated proxy)

$.connection.hub.qs = { 'version' : '1.0' };

Start metodunu çağırmadan önce bir sorgu dizesi değeri ayarlayın (oluşturulan proxy olmadan)Set a query string value before calling the start method (without the generated proxy)

var connection = $.hubConnection();
connection.qs = { 'version' : '1.0' };

Aşağıdaki örnek, sunucu kodundaki bir sorgu dizesi parametresinin nasıl okunacağını gösterir.The following example shows how to read a query string parameter in server code.

public class ContosoChatHub : Hub
{
    public override Task OnConnected()
    {
        var version = Context.QueryString['version'];
        if (version != '1.0')
        {
            Clients.Caller.notifyWrongVersion();
        }
        return base.OnConnected();
    }
}

Taşıma yöntemini belirtmeHow to specify the transport method

Bağlantı sürecinin bir parçası olarak, bir SignalR istemcisi normalde sunucu ve istemci tarafından desteklenen en iyi aktarımı tespit etmek üzere sunucuyla görüşür.As part of the process of connecting, a SignalR client normally negotiates with the server to determine the best transport that is supported by both server and client. Kullanmak istediğiniz taşımayı zaten biliyorsanız, yöntemini çağırdığınızda Transport metodunu belirterek bu anlaşma sürecini atlayabilirsiniz start .If you already know which transport you want to use, you can bypass this negotiation process by specifying the transport method when you call the start method.

Taşıma yöntemini belirten istemci kodu (oluşturulan ara sunucu ile)Client code that specifies the transport method (with the generated proxy)

$.connection.hub.start( { transport: 'longPolling' });

Taşıma yöntemini belirten istemci kodu (oluşturulan proxy olmadan)Client code that specifies the transport method (without the generated proxy)

var connection = $.hubConnection();
connection.start({ transport: 'longPolling' });

Alternatif olarak, SignalR 'nin bunları denemesini istediğiniz sırada birden çok taşıma yöntemi belirtebilirsiniz:As an alternative, you can specify multiple transport methods in the order in which you want SignalR to try them:

Özel bir taşıma geri dönüş şeması belirten istemci kodu (oluşturulan ara sunucu ile)Client code that specifies a custom transport fallback scheme (with the generated proxy)

$.connection.hub.start( { transport: ['webSockets', 'longPolling'] });

Özel bir taşıma geri dönüş şeması belirten istemci kodu (oluşturulan proxy olmadan)Client code that specifies a custom transport fallback scheme (without the generated proxy)

var connection = $.hubConnection();
connection.start({ transport: ['webSockets', 'longPolling'] });

Taşıma yöntemini belirtmek için aşağıdaki değerleri kullanabilirsiniz:You can use the following values for specifying the transport method:

  • WebSockets"webSockets"
  • "foreverFrame""foreverFrame"
  • "serverSentEvents""serverSentEvents"
  • "longPolling""longPolling"

Aşağıdaki örneklerde, bir bağlantı tarafından hangi taşıma yönteminin kullanıldığını nasıl bulacağınız gösterilmektedir.The following examples show how to find out which transport method is being used by a connection.

Bir bağlantı tarafından kullanılan aktarım yöntemini görüntüleyen istemci kodu (oluşturulan ara sunucu ile)Client code that displays the transport method used by a connection (with the generated proxy)

$.connection.hub.start().done(function () {
    console.log("Connected, transport = " + $.connection.hub.transport.name);
});

Bir bağlantı tarafından kullanılan aktarım yöntemini görüntüleyen istemci kodu (oluşturulan proxy olmadan)Client code that displays the transport method used by a connection (without the generated proxy)

var connection = $.hubConnection();
connection.hub.start().done(function () {
    console.log("Connected, transport = " + connection.transport.name);
});

Sunucu kodundaki aktarım yöntemini denetleme hakkında daha fazla bilgi için bkz. ASP.NET SignalR hub 'LARı API Kılavuzu-sunucu-bağlam özelliğinden istemci hakkında bilgi alma.For information about how to check the transport method in server code, see ASP.NET SignalR Hubs API Guide - Server - How to get information about the client from the Context property. Aktarımlar ve geri göndermeler hakkında daha fazla bilgi için bkz. SignalR 'ye giriş-aktarımlar ve geri göndermeler.For more information about transports and fallbacks, see Introduction to SignalR - Transports and Fallbacks.

Hub sınıfı için proxy almaHow to get a proxy for a Hub class

Oluşturduğunuz her bağlantı nesnesi bir veya daha fazla hub sınıfı içeren bir SignalR hizmetine bağlantı hakkındaki bilgileri kapsüller.Each connection object that you create encapsulates information about a connection to a SignalR service that contains one or more Hub classes. Bir hub sınıfıyla iletişim kurmak için kendi oluşturduğunuz (oluşturulan proxy kullanmıyorsanız) veya sizin için oluşturulan bir ara sunucu nesnesi kullanırsınız.To communicate with a Hub class, you use a proxy object which you create yourself (if you're not using the generated proxy) or which is generated for you.

İstemci üzerinde, proxy adı hub sınıfı adının Camel bir sürümüdür.On the client the proxy name is a camel-cased version of the Hub class name. SignalR, JavaScript kodunun JavaScript kurallarına uyum sağlamak için bu değişikliği otomatik olarak yapar.SignalR automatically makes this change so that JavaScript code can conform to JavaScript conventions.

Sunucudaki hub sınıfıHub class on server

public class ContosoChatHub : Hub

Hub için üretilen istemci ara sunucusuna bir başvuru alınGet a reference to the generated client proxy for the Hub

var myHubProxy = $.connection.contosoChatHub

Hub sınıfı için istemci ara sunucusu oluşturma (oluşturulan proxy olmadan)Create client proxy for the Hub class (without generated proxy)

var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');

Hub sınıfınızı bir özniteliğiyle süslemek istiyorsanız HubName , büyük/küçük harf durumunu değiştirmeden tam adı kullanın.If you decorate your Hub class with a HubName attribute, use the exact name without changing case.

HubName özniteliğine sahip sunucudaki hub sınıfıHub class on server with HubName attribute

[HubName("ContosoChatHub")]
public class ChatHub : Hub

Hub için üretilen istemci ara sunucusuna bir başvuru alınGet a reference to the generated client proxy for the Hub

var contosoChatHubProxy = $.connection.ContosoChatHub

Hub sınıfı için istemci ara sunucusu oluşturma (oluşturulan proxy olmadan)Create client proxy for the Hub class (without generated proxy)

var contosoChatHubProxy = connection.createHubProxy('ContosoChatHub');

İstemcide sunucunun çağırabir yöntemi tanımlamaHow to define methods on the client that the server can call

Sunucunun bir hub 'dan çağıracaı bir yöntemi tanımlamak için, oluşturulan proxy 'nin özelliğini kullanarak hub proxy 'sine bir olay işleyicisi ekleyin client veya on oluşturulan proxy kullanmıyorsanız yöntemi çağırın.To define a method that the server can call from a Hub, add an event handler to the Hub proxy by using the client property of the generated proxy, or call the on method if you aren't using the generated proxy. Parametreler karmaşık nesneler olabilir.The parameters can be complex objects.

Bağlantıyı kurmak için yöntemini çağırmadan önce olay işleyicisini ekleyin start .Add the event handler before you call the start method to establish the connection. (Yöntemini çağırdıktan sonra olay işleyicileri eklemek istiyorsanız start , bu belgede daha önce bir bağlantı kurma bölümündeki nota bakın ve oluşturulan proxy 'yi kullanmadan bir yöntemi tanımlamak için gösterilen sözdizimini kullanın.)(If you want to add event handlers after calling the start method, see the note in How to establish a connection earlier in this document, and use the syntax shown for defining a method without using the generated proxy.)

Yöntem adı eşleştirme, büyük/küçük harfe duyarlıdır.Method name matching is case-insensitive. Örneğin, Clients.All.addContosoChatMessageToPage sunucusunda, AddContosoChatMessageToPage addContosoChatMessageToPage veya istemcisinde yürütülür addcontosochatmessagetopage .For example, Clients.All.addContosoChatMessageToPage on the server will execute AddContosoChatMessageToPage, addContosoChatMessageToPage, or addcontosochatmessagetopage on the client.

İstemci üzerinde yöntemi tanımlama (oluşturulan ara sunucu ile)Define method on client (with the generated proxy)

var contosoChatHubProxy = $.connection.contosoChatHub;
contosoChatHubProxy.client.addContosoChatMessageToPage = function (userName, message) {
    console.log(userName + ' ' + message);
};
$.connection.hub.start()
    .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
    .fail(function(){ console.log('Could not Connect!'); });

İstemci üzerinde yöntemi tanımlamanın alternatif yolu (oluşturulan ara sunucu ile)Alternate way to define method on client (with the generated proxy)

$.extend(contosoChatHubProxy.client, {
    addContosoChatMessageToPage: function(userName, message) {
    console.log(userName + ' ' + message);
    };
});

İstemci üzerinde yöntemi tanımlayın (oluşturulan ara sunucu olmadan veya başlangıç yöntemini çağırdıktan sonra eklenirken)Define method on client (without the generated proxy, or when adding after calling the start method)

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName, message) {
    console.log(userName + ' ' + message);
});
connection.start()
    .done(function(){ console.log('Now connected, connection ID=' + connection.id); })
    .fail(function(){ console.log('Could not connect'); });

İstemci yöntemini çağıran sunucu koduServer code that calls the client method

public class ContosoChatHub : Hub
{
    public void NewContosoChatMessage(string name, string message)
    {
        Clients.All.addContosoChatMessageToPage(name, message);
    }
}

Aşağıdaki örnekler, bir yöntem parametresi olarak karmaşık bir nesne içerir.The following examples include a complex object as a method parameter.

İstemci üzerinde karmaşık bir nesne alan (oluşturulan ara sunucu ile) yöntemi tanımlayınDefine method on client that takes a complex object (with the generated proxy)

var contosoChatHubProxy = $.connection.contosoChatHub;
contosoChatHubProxy.client.addMessageToPage = function (message) {
    console.log(message.UserName + ' ' + message.Message);
});

İstemci üzerinde karmaşık bir nesne alan (oluşturulan proxy olmadan) yöntemi tanımlayınDefine method on client that takes a complex object (without the generated proxy)

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
chatHubProxy.on('addMessageToPage', function (message) {
    console.log(message.UserName + ' ' + message.Message);
});

Karmaşık nesneyi tanımlayan sunucu koduServer code that defines the complex object

public class ContosoChatMessage
{
    public string UserName { get; set; }
    public string Message { get; set; }
}

Karmaşık bir nesne kullanarak istemci yöntemini çağıran sunucu koduServer code that calls the client method using a complex object

public void SendMessage(string name, string message)
{
    Clients.All.addContosoChatMessageToPage(new ContosoChatMessage() { UserName = name, Message = message });
}

İstemciden sunucu yöntemlerini çağırmaHow to call server methods from the client

İstemciden bir sunucu yöntemi çağırmak için, oluşturulan proxy server 'yi kullanmıyorsanız, oluşturulan proxy 'nin özelliğini veya invoke hub proxy üzerinde yöntemi kullanın.To call a server method from the client, use the server property of the generated proxy or the invoke method on the Hub proxy if you aren't using the generated proxy. Dönüş değeri veya parametreleri karmaşık nesneler olabilir.The return value or parameters can be complex objects.

Hub üzerindeki yöntem adının Camel bir sürümünü geçirin.Pass in a camel-case version of the method name on the Hub. SignalR, JavaScript kodunun JavaScript kurallarına uyum sağlamak için bu değişikliği otomatik olarak yapar.SignalR automatically makes this change so that JavaScript code can conform to JavaScript conventions.

Aşağıdaki örneklerde, dönüş değeri olmayan bir sunucu yönteminin nasıl çağrılacağını ve dönüş değerine sahip bir sunucu yönteminin nasıl çağrılacağını gösterilmektedir.The following examples show how to call a server method that doesn't have a return value and how to call a server method that does have a return value.

HubMethodName özniteliği olmayan sunucu yöntemiServer method with no HubMethodName attribute

public class ContosoChatHub : Hub
{
    public void NewContosoChatMessage(ChatMessage message)
    {
        Clients.All.addContosoChatMessageToPage(message);
    }
}

Bir parametreye geçirilen karmaşık nesneyi tanımlayan sunucu koduServer code that defines the complex object passed in a parameter

public class ChatMessage
{
    public string UserName { get; set; }
    public string Message { get; set; }
}

Sunucu yöntemini çağıran istemci kodu (oluşturulan ara sunucu ile)Client code that invokes the server method (with the generated proxy)

contosoChatHubProxy.server.newContosoChatMessage({ UserName: userName, Message: message}).done(function () {
        console.log ('Invocation of NewContosoChatMessage succeeded');
    }).fail(function (error) {
        console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
    });

Sunucu yöntemini çağıran istemci kodu (oluşturulan proxy olmadan)Client code that invokes the server method (without the generated proxy)

contosoChatHubProxy.invoke('newContosoChatMessage', { UserName: userName, Message: message}).done(function () {
        console.log ('Invocation of NewContosoChatMessage succeeded');
    }).fail(function (error) {
        console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
    });

Hub yöntemini bir özniteliğiyle Süsleriniz HubMethodName durumunda bu adı, büyük/küçük harf olmadan kullanın.If you decorated the Hub method with a HubMethodName attribute, use that name without changing case.

HubMethodName özniteliğiyle sunucu yöntemiServer method with a HubMethodName attribute

public class ContosoChatHub : Hub
{
    [HubMethodName("NewContosoChatMessage")]
    public void NewContosoChatMessage(string name, string message)
    {
        Clients.All.addContosoChatMessageToPage(name, message);
    }
}

Sunucu yöntemini çağıran istemci kodu (oluşturulan ara sunucu ile)Client code that invokes the server method (with the generated proxy)

contosoChatHubProxy.server.NewContosoChatMessage(userName, message).done(function () {
        console.log ('Invocation of NewContosoChatMessage succeeded');
    }).fail(function (error) {
        console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
    });

Sunucu yöntemini çağıran istemci kodu (oluşturulan proxy olmadan)Client code that invokes the server method (without the generated proxy)

contosoChatHubProxy.invoke('NewContosoChatMessage', userName, message).done(function () {
        console.log ('Invocation of NewContosoChatMessage succeeded');
    }).fail(function (error) {
        console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
    });

Yukarıdaki örneklerde, dönüş değeri olmayan bir sunucu yönteminin nasıl çağrılacağını gösterilmektedir.The preceding examples show how to call a server method that has no return value. Aşağıdaki örneklerde, dönüş değeri olan bir sunucu yönteminin nasıl çağrılacağını gösterilmektedir.The following examples show how to call a server method that has a return value.

Dönüş değerine sahip bir yöntem için sunucu koduServer code for a method that has a return value

public class StockTickerHub : Hub
{
    public IEnumerable<Stock> GetAllStocks()
    {
        return _stockTicker.GetAllStocks();
    }
}

Dönüş değeri için kullanılan hisse senedi sınıfıThe Stock class used for the return value

public class Stock
{
    public string Symbol { get; set; }
    public decimal Price { get; set; }
}

Sunucu yöntemini çağıran istemci kodu (oluşturulan ara sunucu ile)Client code that invokes the server method (with the generated proxy)

function init() {
    return stockTickerProxy.server.getAllStocks().done(function (stocks) {
        $.each(stocks, function () {
            var stock = this;
            console.log("Symbol=" + stock.Symbol + " Price=" + stock.Price);
        });
    }).fail(function (error) {
        console.log('Error: ' + error);
    });
}

Sunucu yöntemini çağıran istemci kodu (oluşturulan proxy olmadan)Client code that invokes the server method (without the generated proxy)

function init() {
    return stockTickerProxy.invoke('getAllStocks').done(function (stocks) {
        $.each(stocks, function () {
            var stock = this;
            console.log("Symbol=" + stock.Symbol + " Price=" + stock.Price);
        });
    }).fail(function (error) {
        console.log('Error: ' + error);
    });
}

Bağlantı ömrü olaylarını işlemeHow to handle connection lifetime events

SignalR, işleyebilmeniz için aşağıdaki bağlantı ömrü olaylarını sağlar:SignalR provides the following connection lifetime events that you can handle:

  • starting: Bağlantı üzerinden herhangi bir veri gönderilmeden önce tetiklenir.starting: Raised before any data is sent over the connection.
  • received: Bağlantıda herhangi bir veri alındığında tetiklenir.received: Raised when any data is received on the connection. Alınan verileri sağlar.Provides the received data.
  • connectionSlow: İstemci yavaş veya sık bırakma bağlantısı algıladığında tetiklenir.connectionSlow: Raised when the client detects a slow or frequently dropping connection.
  • reconnecting: Temeldeki aktarım yeniden bağlanmaya başladığında tetiklenir.reconnecting: Raised when the underlying transport begins reconnecting.
  • reconnected: Temeldeki aktarım yeniden bağlandığında tetiklenir.reconnected: Raised when the underlying transport has reconnected.
  • stateChanged: Bağlantı durumu değiştiğinde tetiklenir.stateChanged: Raised when the connection state changes. Eski durumu ve yeni durumu (bağlanma, bağlanma, yeniden bağlanma veya bağlantısı kesildi) sağlar.Provides the old state and the new state (Connecting, Connected, Reconnecting, or Disconnected).
  • disconnected: Bağlantının bağlantısı kesildiğinde tetiklenir.disconnected: Raised when the connection has disconnected.

Örneğin, dikkat çekici gecikmelere neden olabilecek bağlantı sorunları olduğunda uyarı iletilerini göstermek istiyorsanız connectionSlow olayı işleyin.For example, if you want to display warning messages when there are connection problems that might cause noticeable delays, handle the connectionSlow event.

Connectionlow olayını işle (oluşturulan ara sunucu ile)Handle the connectionSlow event (with the generated proxy)

$.connection.hub.connectionSlow(function () {
    console.log('We are currently experiencing difficulties with the connection.')
});

Connectionlow olayını işle (oluşturulan proxy olmadan)Handle the connectionSlow event (without the generated proxy)

var connection = $.hubConnection();
connection.connectionSlow(function () {
    console.log('We are currently experiencing difficulties with the connection.')
});

Daha fazla bilgi için bkz. SignalR 'de bağlantı ömrü olaylarını anlama ve işleme.For more information, see Understanding and Handling Connection Lifetime Events in SignalR.

Hataları işlemeHow to handle errors

SignalR JavaScript istemcisi, error için bir işleyici ekleyebileceğiniz bir olay sağlar.The SignalR JavaScript client provides an error event that you can add a handler for. Ayrıca, bir sunucu yöntemi çağrısından kaynaklanan hatalara yönelik bir işleyici eklemek için Fail metodunu kullanabilirsiniz.You can also use the fail method to add a handler for errors that result from a server method invocation.

Sunucuda ayrıntılı hata iletilerini açıkça etkinleştirmezseniz, bir hatadan sonra SignalR 'nin döndürdüğü özel durum nesnesi hata hakkında en az bilgi içerir.If you don't explicitly enable detailed error messages on the server, the exception object that SignalR returns after an error contains minimal information about the error. Örneğin, bir çağrı newContosoChatMessage başarısız olursa, hata nesnesindeki hata iletisi, There was an error invoking Hub method 'contosoChatHub.newContosoChatMessage'. Güvenlik nedenleriyle, üretimde istemcilere ayrıntılı hata iletileri gönderilmesi önerilmez, ancak sorun giderme amacıyla ayrıntılı hata iletileri etkinleştirmek istiyorsanız, sunucuda aşağıdaki kodu kullanın.For example, if a call to newContosoChatMessage fails, the error message in the error object contains "There was an error invoking Hub method 'contosoChatHub.newContosoChatMessage'." Sending detailed error messages to clients in production is not recommended for security reasons, but if you want to enable detailed error messages for troubleshooting purposes, use the following code on the server.

var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableDetailedErrors = true;
app.MapSignalR(hubConfiguration);

Aşağıdaki örnek, hata olayı için nasıl işleyicinin ekleneceğini gösterir.The following example shows how to add a handler for the error event.

Hata işleyicisi ekleme (oluşturulan ara sunucu ile)Add an error handler (with the generated proxy)

$.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
});

Hata işleyicisi ekleme (oluşturulan proxy olmadan)Add an error handler (without the generated proxy)

var connection = $.hubConnection();
connection.error(function (error) {
    console.log('SignalR error: ' + error)
});

Aşağıdaki örnek, bir yöntem çağrısından bir hatanın nasıl işleneceğini gösterir.The following example shows how to handle an error from a method invocation.

Yöntem çağrısından bir hata işleme (oluşturulan ara sunucu ile)Handle an error from a method invocation (with the generated proxy)

contosoChatHubProxy.newContosoChatMessage(userName, message)
    .fail(function(error) { 
        console.log( 'newContosoChatMessage error: ' + error) 
    });

Yöntem çağrısından bir hata işleme (oluşturulan proxy olmadan)Handle an error from a method invocation (without the generated proxy)

contosoChatHubProxy.invoke('newContosoChatMessage', userName, message)
    .fail(function(error) { 
        console.log( 'newContosoChatMessage error: ' + error) 
    });

Bir yöntem çağrısı başarısız olursa, error olay da oluşturulur, bu nedenle error Yöntem işleyicisindeki ve .fail Yöntem geri çağırmasında kodunuz yürütülür.If a method invocation fails, the error event is also raised, so your code in the error method handler and in the .fail method callback would execute.

İstemci tarafı günlük kaydını etkinleştirmeHow to enable client-side logging

Bir bağlantıda istemci tarafı günlüğe kaydetmeyi etkinleştirmek için, bağlantıyı logging kurmak üzere yöntemi çağırmadan önce bağlantı nesnesi üzerinde özelliğini ayarlayın start .To enable client-side logging on a connection, set the logging property on the connection object before you call the start method to establish the connection.

Günlüğe kaydetmeyi etkinleştirme (oluşturulan ara sunucu ile)Enable logging (with the generated proxy)

$.connection.hub.logging = true;
$.connection.hub.start();

Günlüğe kaydetmeyi etkinleştir (oluşturulan proxy olmadan)Enable logging (without the generated proxy)

var connection = $.hubConnection();
connection.logging = true;
connection.start();

Günlükleri görmek için tarayıcınızın geliştirici araçlarını açın ve konsol sekmesine gidin. Bunun nasıl yapılacağını gösteren adım adım yönergeleri ve ekran görüntülerini gösteren bir öğretici için, bkz. ASP.NET SignalR Ile sunucu yayını-günlüğü etkinleştirme.To see the logs, open your browser's developer tools and go to the Console tab. For a tutorial that shows step-by-step instructions and screen shots that show how to do this, see Server Broadcast with ASP.NET Signalr - Enable Logging.