こんにちはマツダです。
ASP.NETアプリケーションをリモートデバッグする方法をご紹介します。
各バージョン
- Windows Server 2016
- IIS 10.0
- .NET Framework 4.6
Remoteツールをインストール
「Remote Tools for Visual Studio 2019(x64)」をIISを動かすサーバ側にインストールします。
https://visualstudio.microsoft.com/ja/downloads/
の「Visual Studio 2019 のツール」の「Remote Tools for Visual Studio 2019」からダウンロードしてインストールください。
Remoteツールの設定
スタートメニューから「Remote Debugger Configuration Wizard」を起動します。
以下の通り設定します。
Visual Studio 2019リモートデバッガーサービスを実行する:チェック
ユーザ:LocalSystem
パスワード:空
リモートデバッガーが、次のネットワークと通信できるようにします:すべてチェック
Remoteサービスの起動確認
Visual Studio 2019 Remote Debuggerサービスが起動していることを確認します。
ASP.NETアプリケーションの準備
Visual Studio 2019で新規ASP.NET(Web Forms)アプリケーションを作成します。
今回はデフォルトのWebApplication1.slnのDefault.aspxに以下のようにテストボタンを追加しました。
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:label runat="server" id="lblMessage" /><br />
<asp:button runat="server" id="btn1" onclick="btn1_click" text="テストボタン" />
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn1_click(object sender, EventArgs e)
{
lblMessage.Text = "テストボタンがクリックされました。";
}
}
}
そしてWebApplication1.slnを発行し、サーバ側のIISに配置して動作するようにしておきます。
※構成をReleaseで発行するとリモートデバッグできなかったので、構成はDebugで発行ください。
リモートデバッグ
ローカルのVisual StudioでWebApplication1.slnを開き、メニューの「デバッグ」→「プロセスにアタッチ」を選択します。
接続先に「サーバのIP:4024」を入力し、エンターを押し、管理者ユーザ名/パスワードを入力します。
※事前にサーバ側のFWで4024番ポートを許可しておいてください。(またはVisualStudioリモートデバッガーをプログラムとして許可)
プロセス一覧でw3wp.exeを選択しアタッチをクリックします。
※w3wp.exeが複数ある場合は対象のWebApplication1のプロセスを選択します。
ボタンクリックのイベントにブレイクポイントを設定し、サーバのWebApplication1にブラウザでアクセスし、テストボタンをクリックしてポストバックさせます。
ローカルのVisual Studioでブレイクポイントにヒットすることを確認します。
終わり
無事リモートデバッグすることができました。
サーバでしか発生しないバグの調査などに活用できるんじゃないかと思います。