2013-07-30 20 views

risposta

22

I browser lo supportano perché hanno implementato il protocollo internamente, la maggior parte dei browser non utilizzerà le librerie di trasporto del sistema operativo in modo saranno in grado di utilizzare WebSockets anche se il SO non lo supporta direttamente.

HTTP.SYS prima di Windows 8/2012 has no built in support for WebSockets, quindi sebbene .NET 4.5 contenga classi WebSocket, non funzioneranno a meno che non si esegua .NET 4.5+ su Windows 8/2012 e ciò influirà sulle soluzioni di self-hosting in esecuzione in Windows < 8.

L'implementazione risiede nel codice del sistema operativo che .NET e IIS8 sfruttano. Le classi .NET semplicemente racchiudono le chiamate attraverso HTTP.SYS in modo da generare un'eccezione su un sistema operativo che non ha il supporto sottostante.

Quando si esegue l'autoassistenza, è comunque possibile utilizzare il proprio server Web Socket interno come Fleck e comunicare a SignalR che si supporta effettivamente Web Sockets indipendentemente dal proprio sistema operativo.

avviare un server Fleck nell'applicazione self-hosted (esempi su their site) e come esempio si può fare questo per un PersistentConnection auto-host:

public override Task ProcessRequest(HostContext context) 
{ 
    // Override what SignalR will be telling you internally and point to your own Web Socket Server. 
    context.Items[HostConstants.SupportsWebSockets] = true; 
    context.Items[HostConstants.WebSocketServerUrl] = "ws://localhost:3000"; 
    return base.ProcessRequest(context); 
} 

di responsabilità: Questa è una caratteristica non documentata , gli sviluppatori di SignalR mi hanno detto che questo potrebbe non essere possibile nelle versioni future della libreria. Tieni presente che dovrai anche tenere da parte i keep-alive e serializzare i tuoi dati su JSON in modo che risulti piacevole con i client SignalR. Funziona ancora nella versione 1.1.3.

+1

Bene, allora la soluzione è semplice. Solo HTTP.sys back-port alla versione precedente! Quanto può essere # $% @% # @ $ difficile? Abbiamo hardware di sviluppo che ci piacerebbe passare a Win8, ma non è possibile grazie all'assenza di supporto per driver win8, quindi siamo bloccati con win7. – Kaboo

+0

Vorrei ulteriori informazioni su questo. Ho provato a fare qualcosa di simile per un po 'e fino ad ora non sapevo che questa fosse un'opzione. Ho un server websocket personalizzato in ascolto su una porta e ho aggiunto il codice che hai sopra, facendo riferimento alla porta, ma come faccio a far funzionare la parte owin con questo? Ad esempio, WebApp.Start < > ('localhost: 12345') avvia un listener http per il segnale r. – sqenixs

+0

@sqenixs Quando si imposta SignalR non si fa nulla in modo diverso, è sufficiente sovrascrivere 'ProcessRequest' nelle classi che ereditano da PersistentConnection o HubConnection. Owin non ha nulla a che fare con questa domanda o la risposta e completamente fuori tema. – BrutalDev

0

Sì, richiede Windows Server 2012 spunta la citazione sotto da SignalR Supported Platforms

Il componente server SignalR può essere ospitato nel seguente server o sistemi operativi client. Si noti che per SignalR utilizzare WebSockets, è richiesto Windows Server 2012 o Windows 8 (WebSocket può essere utilizzato su siti Web di Windows Azure, purché la versione del framework .NET del sito sia impostata su 4.5 e Web Sockets sia abilitato nel sito Pagina di configurazione).

anche una buona lettura sul perché si possono trovare here

+0

Giusto, ma è solo perché sta usando IIS attraverso asp.net. Un segnale auto-ospitato non richiede necessariamente IIS 8. Inoltre, se si guarda il codice sorgente, sembra che WebSockets sia inserito in OWIN, purché sia ​​installato .net 4.5. Non ho le capacità superbe da leggere e sapere per certo, però, ed è per questo che lo sto chiedendo. –

+0

@ ton.yeung In realtà no, è una funzionalità a livello di sistema operativo, perché anche le app client necessitano di Windows 8, a meno che non si utilizzi un browser come client, quindi è necessario un browser con supporto HTML 5 – MEYWD

+0

come può essere una funzionalità a livello di sistema operativo se un browser che supporta HTML5 consentirà websockets? –

1

ho so per certo che WebSockets non sono supportati ora da un veloce test. Ho creato un hub self hosted e quindi un client jquery veloce. Sulla mia macchina Windows 8 la querystring mostrava websocket, sul server 2008 r2 mostrava polling lungo ...

Problemi correlati