DHJJ [Hatsune's Journal Japan] blog

Hatsune's Journal Japan blog

目次

Blog 利用状況

ニュース

最新ツイート

運営サイト

Hatsune's Journal Japan
DHJJ

著作など

資格など

OCP
MCP

書庫

日記カテゴリ

わんくま同盟

[WebSocket]System.Net.WebSocketsはWindows 7では動かない

時々忘れがちになるのでまとめておきますね。


System.Net.WebSocketsはWindows 7では動かない

System.Net.WebSocketsを使ってWebSocketクライアントを作成したとき、Windows 8/8.1やWindows 10では問題なく稼働しますがWindows 7では実行時エラーで異常終了します。

これは

https://msdn.microsoft.com/ja-jp/library/system.net.websockets.websocket.aspx

-------引用開始

一部のクラスで、 System.Net.WebSockets 名前空間は、Windows 7、Windows Vista SP2、および Windows Server 2008 でサポートされます。 ただし、クライアントとサーバー Websocket の唯一のパブリックの実装では、Windows 8 および Windows Server 2012となります。

-------引用終了

と注意書きがあるように、定義はあるけれどWindows 8以降じゃないと実装が伴っていないところがあるからです。

なぜ、こんなことがあるかといえば、Windowsのカーネルモードドライバであるhttp.sysを直接利用することでHTTP周りのオーバーヘッドを少なくしているのですが、Windows 7のhttp.sysがWebSocketに対応していないからです。

Windwos 7のメインストリームサポートは終了しています

https://www.microsoft.com/ja-jp/atlife/article/windows10-portal/eos.aspx

みんな大好きWindows 7は2009年10月22日にライフサイクルがスタートして2015年1月13日にメインストリームサポートが終了しています。延長サポートの終了こそ2020年1月14日ということでまだ先ですが、延長サポート期間である現在はセキュリティ更新はおこなわれますが、仕様変更や新機能のリクエストはサポート対象外となり、これからWindows 7のHTTP.sysにWebSocket実装が追加されることはほぼないと考えてよいでしょう。

ではどうすればいいのか

一つの解決策としては、HTTP.sysを使わないWebSocket実装のコードを書く、もしくは、HTTP.sysを使っていないライブラリをNuGetで探してくるというものがあります。

https://github.com/kerryjiang/WebSocket4Net

https://github.com/sta/websocket-sharp

NuGetでライブラリを探すときは、企業ユースを考えるならばSystem.Net.WebSocketsならば対応している認証PROXYがサポートされているかなどのチェックを十分に行う必要があるでしょう。なお、残念ながら上記2つについてもまだきっちり調べ終わっていません。


しかし、System.Net.WebSocketsであればHTTP.sysを使って「オーバーヘッドが少ない」=「性能がよいことが期待される」なのにWindwos 7をサポートすることでその利点を得られないという問題が生じてしまいます。

対象となる機能がWindows 7でも使えないといけないのか、もしくは、対象となる利用者がWindows 7をどれくらい使っているのかを見極めて判断するといいでしょう。

企業でもWindows 7からWindows 8.1やWindows 10への置き換え(少なくとも新規導入は8.1か10がデフォルト)が始まっている時期なので悩ましいところですね。


Windows 8以降かどうかをチェックする

Windows 7のときにはWebSocketを使った機能をdisableしたいときなどは、OSのバージョンチェックが必要になってきます。

対象はWPFとかWindowsフォームのときで、UWPやXamarin.Android、Xamarin.iOSのときは対象環境で動かないということはないのでチェックは不要です。

ですので実装時は

#if WPF

#endif

のようにifディレクティブを定義してその中でOSバージョンのメジャーバージョンとマイナーバージョンを取得してチェックします。

var searcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
var os = searcher.Get().Cast().FirstOrDefault();
var major = 6;
var minor = 1;
if ((os != null) && (os["OsType"] != null) && (os["Version"] != null))
{
    if (os["OsType"].ToString() == "18")
    {
        major = new System.Version(os["Version"].ToString()).Major;
        minor = new System.Version(os["Version"].ToString()).Minor;
    }
}

Windows 10以上はmajor >= 10でよいのですが、Windows 8.xは、major == 6 && minor >= 2で判断しますので、その点だけ注意しましょう。

投稿日時 : 2017年10月7日 17:31

Feedback

# re: Internet Explorer 11 で、右クリックしたときに表示されるメニューで、Bingではなく、Google をデフォルトの検索エンジンとして設定するには? 2017/12/08 18:13 meadc

http://www.ups-tracking.us ups shipping
http://www.hermesoutlet.co/ hermes outlet bag
http://www.prada-outlet-online.com/ prada outlet online store
http://www.louis--vuitton.co louis vuitton on sale
http://www.jimmy-choo.com.au
me adc12.8

# re: [WebSocket]System.Net.WebSocketsはWindows 7では動かない 2017/12/19 15:27 connect2 for pc

connect2 for pc https://www.connect2downloadapp.com/
connect2 https://www.connect2downloadapp.com/
connect2 lenovo https://www.connect2downloadapp.com/connect2-lenovo-app-download/

# re: [WebSocket]System.Net.WebSocketsはWindows 7では動かない 2018/07/14 11:29 phoebesss

http://www.hydiapearls.com Coach Outlet Online
http://www.lumbergear.com Coach Factory Outlet
http://www.peoplesparkfilm.com Coach Factory Outlet
http://www.insite13.com Coach Outlet
http://www.artiswhyigetupinthemorning.com Coach Factory Outlet
http://www.wowinnovators.com Coach Factory Outlet
http://www.outletcoachonlinestores.com Coach Outlet Store Online
http://www.outletstorescoachonline.com Coach Outlet Store Online
http://www.chawengbayview.com Coach Factory Outlet
http://www.hamstersblog.com Coach Outlet Online
http://www.trudysfountainofyouth.com Coach Outlet Store
http://www.unpluggedtucson.com Coach Outlet Online
http://www.cpachpursesfactoryonline.com Coach Purses Outlet
http://www.factoryoutletonlinecoachstore.com Coach Factory Outlet
http://www.glamour-illustrated.com Coach Outlet Store
http://www.factoryonlinecoach.com Coach Factory Outlet

# re: 「ボタン押下」? 2018/07/24 16:26 chenlixiang

2018.7.24chenlixianghttp://www.christian--louboutin.net
http://www.louboutinshoes.org.uk
http://www.nike-airmax.de
http://www.michael-jordan.it
http://www.nikefactory.us.org
http://www.valentinoshoesonsale.us.com
http://www.truereligionoutlets.in.net
http://www.bottega.us.org
http://www.dolcegabbana.in.net
http://www.brazilworldcupjersey.com
http://www.jordans.co.nl
http://www.ralph--lauren.fr
http://www.converseshoes.org.uk
http://www.tods-shoes.us.com
http://www.pandora-jewelry.us.com
http://www.antoniobrownjerseys.com
http://www.fendisunglasses.us
http://www.occhiali-oakley.it
http://www.nikeoutletstoreonline.org
http://www.jordanxx9.us.com
2018.7.24chenlixiang

# re: INI 編集ツール IniModifier を作成してみる (1) 2018/08/20 12:45 chenlixiang

2018.8.20chenlixianghttp://www.onverseallstar.fr
http://www.bcbg.in.net
http://www.tory--burch.org
http://www.pandora-bracciali.it
http://www.dolceandgabbanasunglasses.com
http://www.manoloblahnik.us.com
http://www.airfoamposite.us
http://www.truereligion-jeans.co.uk
http://www.adidasoutletstores.us.com
http://www.jordans4.us.com
http://www.hermes-birkinbags.in.net
http://www.boseheadphones.us.com
http://www.linksoflondon.me.uk
http://www.michaelkors--canada.ca
http://www.alifeclothing.us
http://www.jordan6.in.net
http://www.michaelkorsoutlet.in.net
http://www.pandora--charms.in.net
http://www.karenmillen.org.uk
http://www.airzoompegasus.us
2018.8.20chenlixiangコメント:

タイトル  
名前  
Url
コメント