Configuring ASP.NET Core application to run at a specific port

एप्लीकेशन को किसी खास port पर रन करने हेतु कॉन्फ़िगर करना

ASP.NET Core एप्लीकेशन को किसी खास पोर्ट पर स्टार्ट करने के लिए कई तरीके हैं, आप एप्लीकेशन को कई तरीके से कॉन्फ़िगरेशन कर सकते हैं. इसमें से कुछ सामान्य तरीके मैं आपको इस लेख में बताता हूँ:

ASP.NET Core एप्लीकेशन को किसी खास पोर्ट पर स्टार्ट करने के लिए कई तरीके हैं, जो आपकी ज़रूरतों और डिप्लॉयमेंट एनवायरनमेंट पर निर्भर करते हैं. यहाँ कुछ सबसे आम और प्रभावी तरीके का मैं उल्लेख करता हूँ:

1. launchSettings.json फ़ाइल (डेवलपमेंट के लिए)

जब आप Visual Studio का उपयोग करके एक नया ASP.NET Core प्रोजेक्ट बनाते हैं, तो Properties फ़ोल्डर में एक launchSettings.json फ़ाइल डिफ़ॉल्ट रूप से जेनरेट होती है. यह फ़ाइल डेवलपमेंट के दौरान एप्लीकेशन को कैसे लॉन्च किया जाए, इसकी सेटिंग्स को नियंत्रित करती है.

इस फ़ाइल में, आपको विभिन्न "प्रोफाइल" मिलेंगे (जैसे IIS Express, आपका प्रोजेक्ट का नाम). आप इसमें applicationUrl प्रॉपर्टी को बदलकर पोर्ट स्पेसिफाई कर सकते हैं.

उदाहरण:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:5000",
      "sslPort": 44300
    }
  },
  "profiles": {
    "YourProjectName": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:8080;https://localhost:8081", // यहाँ पोर्ट बदलें      
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

उपरोक्त उदाहरण में, मैंने YourProjectName प्रोफाइल में applicationUrl को http://localhost:8080;https://localhost:8081 में बदल दिया है. इसका मतलब है कि जब आप इस प्रोफाइल का उपयोग करके एप्लीकेशन को रन करेंगे, तो यह HTTP के लिए पोर्ट 8080 और HTTPS के लिए 8081 पर चलेगा.

ध्यान दें: यह केवल डेवलपमेंट एनवायरनमेंट के लिए है. डिप्लॉयमेंट के लिए अन्य तरीकों का उपयोग करना बेहतर होता है.

2. appsettings.json फ़ाइल (कॉन्फ़िगरेशन के ज़रिए)

आप Kestrel वेब सर्वर के लिए पोर्ट को appsettings.json (या appsettings.Development.json, appsettings.Production.json आदि) में कॉन्फ़िगर कर सकते हैं. यह प्रोडक्शन एनवायरनमेंट के लिए एक अच्छा तरीका है क्योंकि यह एप्लीकेशन के कोड से अलग होता है.

उदाहरण:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5000" // HTTP के लिए पोर्ट      
      },
      "Https": {
        "Url": "https://localhost:5001" // HTTPS के लिए पोर्ट (अगर SSL/TLS कॉन्फ़िगर किया गया है)      
      }
    }
  }
}

आप Url में 0.0.0.0 का उपयोग भी कर सकते हैं यदि आप चाहते हैं कि Kestrel सभी उपलब्ध नेटवर्क इंटरफेस पर सुने (जैसे http://0.0.0.0:5000).

3. कमांड-लाइन आर्ग्यूमेंट्स (--urls)

आप dotnet run कमांड के साथ --urls आर्ग्यूमेंट का उपयोग करके पोर्ट को स्पेसिफाई कर सकते हैं. यह क्विक टेस्ट या कंटेनराइज्ड एनवायरनमेंट के लिए उपयोगी है.

उदाहरण:

dotnet run --urls "http://localhost:8080"

अगर आप मल्टीपल पोर्ट्स पर चलाना चाहते हैं:

dotnet run --urls "http://localhost:8080;https://localhost:8081"

जब आप DLL को सीधे रन करते हैं तो भी यह काम करता है:

dotnet YourProject.dll --urls "http://*:8080"

4. एनवायरनमेंट वेरिएबल (ASPNETCORE_URLS)

यह डिप्लॉयमेंट के लिए एक बहुत ही सामान्य और अनुशंसित तरीका है, खासकर जब डॉकर कंटेनर या CI/CD पाइपलाइन का उपयोग कर रहे हों. ASP.NET Core एप्लीकेशन शुरू होने पर ASPNETCORE_URLS नामक एनवायरनमेंट वेरिएबल को चेक करता है.

उदाहरण (Windows Command Prompt):

set ASPNETCORE_URLS=http://*:8080;https://*:8081dotnet YourProject.dll

उदाहरण (Linux/macOS Bash):

export ASPNETCORE_URLS="http://*:8080;https://*:8081"dotnet YourProject.dll

* का मतलब है कि Kestrel किसी भी उपलब्ध IP एड्रेस पर उस पोर्ट पर सुनेगा. यह तब उपयोगी होता है जब आपका एप्लीकेशन किसी सर्वर पर डिप्लॉय किया जाता है जिसका IP आपको पहले से नहीं पता होता.

आप केवल HTTP या HTTPS पोर्ट को अलग से सेट करने के लिए ASPNETCORE_HTTP_PORTS और ASPNETCORE_HTTPS_PORTS का भी उपयोग कर सकते हैं:


export ASPNETCORE_HTTP_PORTS="8080;8082"
export ASPNETCORE_HTTPS_PORTS="8081;8083"

5. प्रोग्रामेटिक कॉन्फ़िगरेशन (Program.cs)

आप सीधे Program.cs फ़ाइल में कोड के माध्यम से Kestrel को कॉन्फ़िगर कर सकते हैं. यह तब उपयोगी होता है जब आपको रनटाइम पर पोर्ट को डायनामिक रूप से सेट करने की आवश्यकता होती है.

ASP.NET Core 6.0 और बाद में (Minimal APIs):

var builder = WebApplication.CreateBuilder(args); // Kestrel को Configure करें
builder.WebHost.UseKestrel(serverOptions => {
    serverOptions.ListenAnyIP(8080); // HTTP के लिए पोर्ट 8080 पर सुनें    
    serverOptions.ListenAnyIP(8081, listenOptions => // HTTPS के लिए पोर्ट 8081 पर सुनें    
    {
        listenOptions.UseHttps(); // HTTPS सक्षम करें (प्रमाणीकरण के लिए सर्टिफिकेट की आवश्यकता होगी)    
    });
});
var app = builder.Build(); // ... बाकी कॉन्फ़िगरेशन ... 
app.Run();

पुराने ASP.NET Core वर्जन (Startup.cs के साथ):

using Microsoft.AspNetCore.Hosting;
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.UseStartup<Startup>();
    webBuilder.UseKestrel(serverOptions =>
    {
        serverOptions.ListenAnyIP(8080); // HTTP के लिए पोर्ट 8080 पर सुनें              
        serverOptions.ListenAnyIP(8081, listenOptions => // HTTPS के लिए पोर्ट 8081 पर सुनें               
        {
            listenOptions.UseHttps(); // HTTPS सक्षम करें          
        });
    });
});

कौन सा तरीका चुनें?

  • डेवलपमेंट (लोकल मशीन): json सबसे सुविधाजनक है क्योंकि यह Visual Studio के साथ अच्छी तरह से एकीकृत होता है.
  • टेस्टिंग/कंटेनराइज्ड डिप्लॉयमेंट: कमांड-लाइन आर्ग्यूमेंट्स (--urls) या एनवायरनमेंट वेरिएबल (ASPNETCORE_URLS) लचीले और आसानी से ऑटोमेट किए जा सकते हैं.
  • सर्वर डिप्लॉयमेंट (नॉन-कंटेनर): json (या एनवायरनमेंट-विशिष्ट appsettings.<Environment>.json) एक अच्छा विकल्प है क्योंकि यह कॉन्फ़िगरेशन को कोड से अलग रखता है.
  • डायनामिक या विशिष्ट आवश्यकताएं: प्रोग्रामेटिक कॉन्फ़िगरेशन का उपयोग तब करें जब आपको पोर्ट को बहुत विशिष्ट तरीके से या रनटाइम पर सेट करने की आवश्यकता हो.

इनमें से किसी भी तरीके का उपयोग करके आप ASP.NET Core एप्लीकेशन को अपनी पसंद के पोर्ट पर सफलतापूर्वक चला सकते हैं.

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks