web-gelistirme-sc.com

Web Prizli SignalR

Dev ortamımda çalışan websocket'ları almaya çalışıyorum:

  • Visual Studio 2010
  • Windows 7
  • Sinyal R 0,51
  • En Son Chrome/Firefox

Ne yazık ki Javscript istemcisi uzun sorgulama kullanıyor. İstemci tarafındaki web soketlerini zorladığımda hiç bağlanamıyorum:

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

Sunucu kodu kendi kendini barındırır ve örneğe dayanır ve şöyle görünür:

static void Main(string[] args)
{
    string url = "http://localhost:8081/";
    var server = new Server(url);

    // Map the default hub url (/signalr)
    server.MapHubs();

    // Start the server
    server.Start();

    Console.WriteLine("Server running on {0}", url);

    // Keep going until somebody hits 'x'
    while (true)
    {
        ConsoleKeyInfo ki = Console.ReadKey(true);
        if (ki.Key == ConsoleKey.X)
        {
            break;
        }
    }
}

public class MyHub : Hub
{            
    public void Send(string message)
    {
        Clients.addMessage(message);
    }
}

Etrafı araştırdım ve kesin bir şey bulamadım. Ekstra şeyler belirtmem gerekiyor mu, Visual Studio 2012'yi kullanmalı mıyım yoksa bu sadece Windows 8/IIS 8'de çalışacak mı?

29
Luke Belbina

Bu cevaba göre https://stackoverflow.com/a/9135334/700926 SignalR'deki WebSocket desteğinin Windows 8/IIS8'e dayandığını göreceksiniz - bu sorunun cevabı SignalR'ın github sayfasında bir wiki sayfasına da işaret ediyor. , bu sayfa artık yok.

Ancak, with repo'yu github'da klonlayarak ve bazı revizyonlara geri döndüğünüzde, SignalR'ın github sayfasına göre artık varolmayan SignalR.WebSockets projesinin belgelerini göreceksiniz - (ki bu wiki sitesinin neden kaldırıldığını açıklayabilir). SignalR.WebSockets için wikipage’in bu yılın şubat ayındaki revizyonunda şöyle yazıyor:

SignalR.WebSockets istemcilere izin vermek için mevcut bir SignalR projesine paket eklenebilir. WebSocket kullanarak bağlantı kurmak için. protokol . SignalR jQuery istemcisi WebSockets üzerinden otomatik olarak bağlanmayı dener (eğer tarayıcı destekliyorsa), istemcide hiçbir değişiklik gerekmez. SignalR tabanlı uygulamanıza WebSockets eklemek için kullanılır.

SignalR.WebSockets Microsoft.WebSockets içinden gelen WebSocket bağlantılarını dinlemek için. ASP.NET. Bu paket sırayla yeni WebSockets support .__ 'a bağlıdır. ASP.NET 4.5 ve IIS 8.0'a eklendi. Sonuç olarak, SignalR.WebSockets paketi yalnızca bir Windows 8 makinesinde çalışır (.NET 4.5 daha önceki Windows sürümlerine yüklenir, ancak IIS 8.0 için Windows 8 gerekir). Bir Windows .__'nın nasıl kurulacağı hakkında daha fazla bilgi için. 8 makine (geliştirici önizlemesini kullanarak) bkz. İşte .

Yukarıda sağlayabildiğimden daha yeni bilgiler aramaya çalıştım, ancak söyleyebildiğim kadarıyla SignalR wiki bu konuyu güncel sürümünde açıkça ele almıyor.

23

Windows 8/.NET 4.5'te bile başlangıçta çalışmıyordu, ancak bu ek ipuçlarıyla nihayet çalışmasını sağladım.

  • Websocket desteğini yükleyin

    -> Turn Windows features on or off
    -> Internet Information Services 
    -> World Wide Web Services 
    -> Application Development Features 
    -> WebSocket Protocol
    
  • web.config'de, appSettings altında, bu ayarı ekleyin: 

    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    

SignalR otomatik olarak web soketleri üzerinde anlaşır, belirtilmesi gerekmez ve kodda özel bir şey gerekmez.

55
Maarten

Sinyal R, Windows 7, IIS 7.5 ve Visual Studio 2012'de de çalışır. Tek dezavantajı, longPolling'i aktarım protokolü olarak kullanmasıdır.

SignalR'yi yukarıdaki yapılandırma ile başarılı bir şekilde kullanabilmek için, signalR öğreticilerinin hiçbirinde ayrıntılandırılmayan birkaç şey ayarlamamız gerekir.

Bu nedenle, sunucu tarafında (7, IIS 7.5 kazanın) bağlantı ve proxy oluştururken şöyle bir şey yapmalısınız:

Connection = new HubConnection('someUrl', false);   
Proxy = Connection.CreateHubProxy('myHubProxy');   
Connection.Start(new LongPollingTransport()).Wait(); // notice the specification of transport

Elbette, müşteri tarafında da aynı şekilde taşıma protokolünü 'longPooling' olarak belirtmeniz gerekir:

var connection = $.hubConnection('myUrl', { useDefaultPath: false });
connection.start({ transport: ['websockets', 'longPolling'], jsonp: true, xdomain: true })
1
Leo

SignalR'deki WebSockets sorunlarını gidermek için yukarıdaki çözümlere ek olarak, bir şirket ağındaysanız (veya benzer şekilde yapılandırılmış bir şeyseniz), proxy sunucularınız ve güvenlik duvarlarınız el sıkışmasına engel olabilir.

Ancak, SSL üzerinden erişirseniz, sağladığı sarıcı birçok durumda onu bu girişime karşı korur.

0
Bon