Cài đặt iis ssl cho nhiều website trên cùng 1 máy

Để chuẩn ssl bạn cần delete hết những gì đã import nhầm, cái này quan trọng, ví dụ xóa các ssl trong certificates ở server, xóa COMODO RSA…ở trong các mục MMC > Certificates…

Cái này nên có một máy khác để so sánh không xóa nhầm

Sau đó import từng ssl của từng domain vào, lưu ý phải đặt place store là “web hosting

Sau đó dùng https://www.sslshopper.com/ssl-checker.html#hostname=???

để kiểm tra

Tham khảo:

https://vkhangyang.wordpress.com/2016/10/14/cach-thiet-lap-single-domain-ssl-tren-iis/

https://vkhangyang.wordpress.com/2017/04/28/cach-thiet-lap-multiple-domain-ssl-cho-cung-ip-tren-iis-8/

 

Advertisements

.NET Task.Factory.StartNew

Đọc nhiều tài liệu trên mạng, tuy nhiên cách dùng an toàn là

với mỗi khi cần new task, thì task cha dùng:

Task.Factory.StartNew

Và task con thì dùng

Task.Run

 

Note:

Task.Run(action) == Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);

Task.Factory.StartNew(action) == Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Current);

Đọc thêm:

http://www.infoworld.com/article/3060652/application-development/on-taskfactorystartnew-and-taskrun-methods.html

The Parallel.Invoke method is equivalent setting up a number of tasks using Task.Factory.StartNew(…) then Task.WaitAll(…).

https://colinmackay.scot/tag/parallel-invoke-task-factory-startnew/

Vì nếu dùng tiếp StartNew -> nó dùng tiếp cái current schedule -> trong một số ứng dụng như UI thì nó sẽ dùng cùng thread -> có thể gây ra một số bugs

Tham khảo:

https://richnewman.wordpress.com/2012/11/21/why-starting-a-new-task-in-the-task-parallel-library-tpl-doesnt-always-start-a-new-thread/

 

Đọc thêm về TaskScheduler.Default or TaskScheduler.Current

http://stackoverflow.com/questions/6800705/why-is-taskscheduler-current-the-default-taskscheduler

 

 

Web Session TimeOut

1. Session timeout là gì?

Là khoảng thời gian lớn nhất có thể giữa hai lần user request lên server mà session của user chưa bị hủy. Nói một cách đơn giản hơn, giả sử giá trị timeout này là 30′, thì cứ trong 30′, nếu user không gửi một request nào lên server thì session của user đó sẽ không còn hiệu lực.

Trong ASP.NET, session timeout mặc định là 20′. Có nhiều cách để thay đổi giá trị này, đơn giản nhất là thêm một dòng trong web.config

<sessionState timeout="30"></sessionState>

2. Đặt timeout bao nhiêu là hợp lý?

Giá trị mặc định của nó là 20′, tuy nhiên trong một số trường hợp bạn muốn session tồn tại lâu hơn. Ví dụ một ứng dụng web cho phép người dùng soạn thảo nội dung trực tiếp trên trình duyệt. Bạn không muốn session kết thúc trước khi người dùng soạn thảo xong văn bản, vì thế bạn thiết lập timeout bằng một số rất lớn. Điều này không thực sự ổn vì nó sẽ tốn rất nhiều bộ nhớ của server dành cho session của những người dùng không còn trên website của bạn.

3. Heart beat pattern

Có một giải pháp cho vấn đề này: Thiết lập một giá trị session timeout nhỏ. Đồng thời, phía client sẽ “âm thầm” gửi các request nhỏ, thường xuyên đến server để báo cho server biết nó vẫn còn “sống”. Do đó bạn sẽ không bị tốn bộ nhớ một cách vô ích cho session của những người dùng không còn trên trang. Phương pháp này được biết dưới cái tên Heartbeat design pattern.

  • Thiết lập một giá trị nhỏ cho session timeout (giả sử là 5′)
    <sessionState timeout="5"></sessionState>
    
  • Tạo trang KeepAlive.ashx để nhận request thường xuyên từ client. Trang này không cần làm gì cũng được.
  • Thêm đoạn code javascript sau vào trang bạn muốn thực hiện. Tốt nhất là đặt chúng trong các trang master page
function heartBeat() {
    $.get("KeepAlive.ashx?", function (data) {});
}

$(function () {
    setInterval("heartBeat()", 1000 * 30); // 30s gửi request một lần
});

Nguồn: http://tek.eten.vn/index.php/giai-phap-session-timeout-asp-net

ASP.NET Tạo table hiện thị phức tạp bằng Repeater control

Trong thời gian gần đây tôi gặp nhiều bài toán cần hiển thị TABLE có giao diện phức tạp mà Gridview Control trong ASP.NET không thỏa mãn được. Tôi tìm hiểu và thấy rằng để hiện thị những giao diện phức  tạp của TABLE như hình sau chẳng hạn:

Sử dụng Repeater Control để render

Sử dụng Repeater Control để render

Để thể hiện như  ví dụ trên tôi viết đoạn code như  sau:

<table width=’100%’ cellspacing=’0′ cellpadding=’0′ border=’0′>
<tbody>
<tr>
<td height=’25px’ valign=’top’ class=’bgrxam’>
<asp:Repeater ID=”rpt1″ runat=’server’>
<HeaderTemplate>
<table cellspacing=”0″ cellpadding=”0″ border=”0″ width=”100%” style=”border-collapse: collapse;”>
<tbody>
<tr>
<td align=”center”>
<p align=”center” style=”margin-top: 3px; margin-bottom: 3px;”>
Giải thưởng</p>
</td>
<td align=”center”>
<p align=”center” style=”margin-top: 3px; margin-bottom: 3px;”>
Kết quả</p>
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td height=”25″ width=”20%”>
<%#Eval(“GIAITHUONG”)%>
</td>
<td width=”80%”>
<%#Eval(“KETQUA”)%>
</td>
</tr>
<tr><td height=”2px” background=”images/default/line3d.jpg” colspan=”2″></td></tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td height=”25″ width=”20%”>
<%#Eval(“GIAITHUONG”)%>
</td>
<td width=”80%”>
<%#Eval(“KETQUA”)%>
</td>
</tr>
<tr><td height=”2px” background=”images/default/line3d.jpg” colspan=”2″></td></tr>
</AlternatingItemTemplate>
<FooterTemplate>
</tbody> </table>
</FooterTemplate>
</asp:Repeater>
</td>
<td height=’25px’ valign=’top’ class=’bgrxam’>
<asp:Repeater ID=”rpt2″ runat=’server’>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</tbody>
</table>

Tóm lại với Repeater Control, chúng ta có thể render ra những table có độ phức tạp về thể hiện khác nhau 🙂