2020年1月27日 星期一

[ASP.Net Core] SignalR - issues on Linux container


 ASP.NET Core   SignalR   Linux 



Problems


We encountered some issues while dockerizing ASP.NET Core with SignalR on Linux containers:
1.  Websocket connection from client to server will be blocked by using self-signed SSL certificate.
2.  Websocket connection fails when using Nginx reverse proxy



Environment


ASP.NET Core 2.2.301
Microsoft.AspNetCore.SignalR.Client 1.1.0



Solutions


(Client) Ignore validating insecure SSL cert

To solve the issue:
Websocket connection from client to server will be blocked by using self-signed SSL certificate, we have to bypass validating the certificate of server by always set validation to success in client side:

HubConnection connection = new HubConnectionBuilder()
                .WithUrl(new Uri(this.hubHost), options =>
                {
                    var httpClientHandler = new HttpClientHandler
                    {
                        ClientCertificateOptions = ClientCertificateOption.Manual,
                        ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
                        {
                            // If this is a development app, you could just return true always
                            // In production you should ALWAYS either use a trusted cert or check the thumbprint of the cert matches one you expect.
                            return true;
                        }
                    };
                    options.HttpMessageHandlerFactory = _ => httpClientHandler;
                })
                .Build();

await connection.StartAsync();



(Server) Prevent from buffering asynchronous responses on Nginx

We have to disable buffering asynchronous response(s) for ONLY SignarlR events in Nginx.
To do so, just set proxy_buffering to off.

Here is a configuration sample,

nginx.conf

http {
    sendfile on;
    access_log ./nginx_access.log;
    error_log ./nginx_error.log;
    
    server{
        listen 9999 ssl;
        
        ssl on;
        ssl_certificate           /etc/certs/docker.crt;
        ssl_certificate_key       /etc/certs/docker.key;

        location / {
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-Real-IP           \$remote_addr;
            proxy_set_header    X-Forwarded-For     \$proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto   \$scheme;
            proxy_read_timeout                      600s;
            proxy_pass                              https://xxx:9999/;
        }

        location /keyEventHub {
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-Real-IP           \$remote_addr;
            proxy_set_header    X-Forwarded-For     \$proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto   \$scheme;
            proxy_read_timeout                      2m;
            proxy_connect_timeout                   1m;
            proxy_send_timeout                      1m;
            keepalive_requests                      1000;
            keepalive_timeout                       2m;
            send_timeout                            1m;
            proxy_buffering                         off;
            proxy_pass                              https://xxx:9999/MyEventHub;
        }
    }
}





Reference





2020年1月26日 星期日

2020 越後湯澤玩雪及東京旅遊 Day 7

今天搭17:55日航回台,所以還有半天的時間可以附近走走。

早上跑去買漢堡王當早餐。正值上班時間,隔壁麥當勞排隊排到店外,但是漢堡王相對人就少了許多😂 (應該是對上班族來說等候時間較長,我大概等了五分鐘)

約11:00 Check out離開住了三晚的《秋葉原華盛頓酒店》,必須說這家地理位置太優越,但是我真的不喜歡一出門口就是一大堆人和車的感覺 XD

我們步行到《萬世橋》(From 1912),這裡有二樓步道及一些餐廳、酒館、咖啡廳可以欣賞行進中的電車。


《萬世橋》的平面圖和商店介紹。
和秋葉原的現代化建築剛好形成特別的反差 😊
喜歡咖啡的朋友別錯過《藍瓶子咖啡館》。

上二樓有一個小花園和餐廳。

可以清楚看到經過的電車。

一樓也很漂亮,可以拍很多美美的相片。
準備搭車去機場囉!半路又扭了幾個扭蛋 😅
到達機場,先去《伊藤園》吃個抹茶冰淇淋。

要Check -in時,幸運的看到中央舞台上演出結合歌妓、踢踏舞、XMA的現場表演!而且使用會發光的武士刀(道具),非常華麗又好看的表演!

登機後就算結束了這次七天的日本之旅。
今天是除夕,也是第一次在天空中和這麼多旅客吃年夜飯 😂😂

(路克:別擔心,還有我 Orz)

最後曬一下這次小朋友出走的戰利品,期待下次再造訪冬季的日本。



超推這支輕巧的Panasonic 吹風機^^


這次出遊的影片 ^__^



2020年1月25日 星期六

2020 越後湯澤玩雪及東京旅遊 Day 6

早上去對面的星巴克吃早餐,今天的安排去靠近台場的《日本科學未來館》走走。


未來館位於「百合海鷗線」的【遠程通信中心站】,我們從秋葉原過去比較快的搭車方式:



從【遠程通信中心站】步行到《日本科學未來館》大約五至十分鐘。

出站後往這棟建築走過去吧!
往另外一邊看過去可看到台場的獨角獸鋼彈,遠看還是覺得很壯觀!
PS.  前年(2018)造訪台場在剛彈腳旁留影,真是震撼。


門票大人¥630/位,小孩¥210/位。

進去之後,可先寄放不需要攜帶的東西(例如外套)。
往內部走幾步有一個大廣場可讓遊客直接躺著看大地球。
躺著視角,有夠猛。
(心裡想著會不會有人躺著睡著?果不其然,中午時某強國人佔了一排直接蓋棉被睡午覺 😂)

一樓還有可乘坐由Honda研發的UNI-CUB。(有料)
二樓是未來館的入口,進去之後可更清楚的欣賞這顆大數位球體,原來它是超大的球體螢幕,可顯示不同動畫或畫面。


展區有物理、科學、太空的互動區和活動區,大小朋友都玩的不亦樂乎。


五樓有咖啡廳其(有賣甜點和三明治),七樓是餐廳(簡餐)。

七樓餐廳往外看,又看到獨角獸鋼彈。可惜這趟旅行沒有安排去台場,只能遠觀之!

(試一下Reno 10X的60倍變焦!糊成這樣...😅)

吃完午餐,我們去逛逛禮品店,也是一個瘦荷包的好地方 XDD

下午小莉亞回旅館休息,我就把握時間好好的在秋葉原當個宅男!

首先跑去【VOLKS 秋葉原HOBBY天國】,這裡公仔多的不像話,可惜星戰系列就少的可憐😤😤

來到秋葉原怎麼可能不買公仔!!
但是看到那麼多公仔,突然想到,唉,買也買不完,家裡也沒地方放,所以最後一隻都沒有買XD
接著去尋找【秋葉原扭蛋會館】,車站走過去大概十至十五分鐘。扭蛋機超多,但一樣是星戰沙漠 😭
晚上很多女僕裝伴的女生拿著傳單發給路人,走十步就遇到一位,算是相當獨特的街景。

晚餐跑去【友都八喜Akiba】八樓用餐,話說在日本要找有多一點青菜的店好難找 。

回飯店前跑了一趟UNIQLO,除了退稅櫃台,現在已經採自助結帳的方式。只要把衣服丟進下圖右邊的衣槽,機器會自動算出費用,顧客只要投入鈔票或零錢即可完成結帳,再自行拿紙袋打包即可,真是不得不感嘆科技越來越方便啦!

2020年1月24日 星期五

2020 越後湯澤玩雪及東京旅遊 Day 5

今日預定的行程是到上野公園-國立科學博物館和晴空塔。



小時候常吃的溫蒂漢堡 😂

上野公園好寬廣,走了一段路到了「國立科學博物館」。

樓層簡介
如果有攜帶小孩,極力推薦租一台中文導覽機,省去被問十萬個為什麼的困擾 XD

帥氣的暴龍化石。


抽到了黑色化石的扭蛋 😃


3F有個親子遊戲室(需要事先抽整理卷)是一定要去的,除了遊樂器材結合動物標本非常有趣外,也有圖書閱讀區和放大鏡觀察標本區。
日本小孩玩耍時都還滿安靜的,如果在台灣應該暴動了 😂

遊玩時間限制為40分鐘,中餐可到M2樓用餐。注意需從參觀主樓出門繞過去才過的去唷!我們一直在主樓的M2樓找不到餐廳 XD



餐點有特色但是口味普通。

離開國立科學博物館時,發現1:1抹香鯨!


上野公園還有美術館、動物園... 真的逛一天也逛不完 😊

也有古色古香的星巴克。

中午讓小莉亞回旅館睡個午覺。傍晚行程是去逛晴空塔四樓的《墨田水族館》。

這是第二次來晴空塔。



搭手扶梯到三樓,從戶外步道往下走再搭個手扶梯就可以看見水族館的售票亭和入口。
其實我對水族館沒太大興趣,不過《墨田水族館》實在內部裝潢的太漂亮又有科技感,所以我非常推薦不管是家庭或情侶都可以安排來晴空塔時進來參觀。
裡面有許多座位可以坐著休息兼觀賞魚花草,非常舒適。


可以近距離觀賞企鵝真是超棒的!


記得買一杯企鵝浮冰飲料(軟性或含酒精)來喝,可愛!


離開水族館後,簡單在三樓用餐後已經快20:30了,由於商店街21:00關門,所以我立馬用最快速度逛完三層樓,急急忙忙買了幾盒東京香蕉蛋糕甜點,店員還很好奇為什麼我滿頭大汗😂

不過後來才想起來其實機場免稅店都可以買到,還比較便宜 😭


Bye-bye, 東京晴空塔,希望下次可以慢慢的逛。