【问题标题】:How to customize tcp port number other than default (80)如何自定义非默认的 tcp 端口号 (80)
【发布时间】:2010-05-24 11:51:49
【问题描述】:

我正在使用 Web 服务并使用 httpWebRequest.create api 连接它。如果我在 IIS 中更改 TCP 端口号而不是 80,那么我的应用程序无法连接到它。如何在 IIS 中设置 System.Url 对象中的端口号,以便我的应用程序可以连接到 Web 服务。

【问题讨论】:

  • 可能在您的问题中包括您正在寻找一种方法来确定 IIS 在运行时设置的端口号。

标签: c#


【解决方案1】:

你通常会通过像这样附加端口来做到这一点:

http://www.example.com:81/path/to/page

【讨论】:

  • 没关系,但我怎么知道设置为 IIS 的端口号。我必须在运行时查询此端口号,以便我可以在 URL 中相应地附加端口号
  • 您的意思是您正在尝试连接到 Web 服务,但您不一定事先知道它将在哪个端口上运行?
  • 假设我的 Web 服务 abc 映射到 IIS 中的默认网站。我使用localhost/abc/abc.asmx 访问此网络服务。那时我可以连接到这个服务。假设一个去 IIS 并且在默认网站下将端口号从默认值 80 更改为 90 并重新启动 IIS。现在我来到我的应用程序,但这次它没有连接到 Web 服务,因为我仍在使用 localhost/abc/abc.asmx 而不知道什么是新端口号。我的问题是有什么方法可以找到更改的端口号,以便我可以在 IIS 中使用新的端口号修改请求的 Web 服务地址
【解决方案2】:

使用 http://example.com:8080/ 形式的 URI,其中 8080 可以是其他任何形式

【讨论】:

    【解决方案3】:

    我认为,如果您的 Web 服务的 Uri 是 http://webservice/,那么您可能只需使用 http://webservice:1234,其中 1234 是您的新端口..

    【讨论】:

    • 没关系,但我怎么知道设置为 IIS 的端口号。我必须在运行时查询此端口号,以便我可以在 URL 中相应地附加端口号
    • 要在运行时查询,您需要有另一个为已知 Web 服务提供端口的 Web 服务。恕我直言,没有其他选择,因为您无法在不知道端口的情况下进行任何通信。
    • 假设我的 Web 服务 abc 映射到 IIS 中的默认网站。我使用localhost/abc/abc.asmx 访问此网络服务。那时我可以连接到这个服务。假设一个去 IIS 并且在默认网站下将端口号从默认值 80 更改为 90 并重新启动 IIS。现在我来到我的应用程序,但这次它没有连接到 Web 服务,因为我仍在使用 localhost/abc/abc.asmx 而不知道什么是新端口号。我的问题是有什么方法可以找到更改的端口号,以便我可以在 IIS 中使用新的端口号修改请求的 Web 服务地址
    【解决方案4】:
    • WebRequest.Createstring parameter 一起使用:

      WebRequest.Create("http://{server}:{port});
      
    • WebRequest.Createuri parameter 一起使用:

      Uri myUri = new Uri("http://{server}:{port}");
      WebRequest.Create(Uri);
      

    【讨论】:

    • 没关系,但我怎么知道设置为 IIS 的端口号。我必须在运行时查询此端口号,以便我可以在 URL 中相应地附加端口号
    【解决方案5】:

    确定在远程计算机上运行的 IIS 的端口并不容易。要么您需要采用不同的方式来传达配置(如服务),要么使用端口扫描器来检查所有可能的端口(不推荐)。

    但是,如果 IIS 在本地机器上运行,您可以使用appcmd 命令获取在 IIS 中运行的站点列表。

    appcmd list site
    

    如果您想在 C# 中以编程方式执行此操作,您可以执行以下操作:

    // Setup ProcessStartInfo
    var processInfo = new ProcessStartInfo();
    processInfo.FileName = Environment.ExpandEnvironmentVariables("%windir%\system32\inetsrv\appcmd.exe");
    processInfo.Arguments = "list site";
    processInfo.RedirectStandardOutput = true;
    processInfo.UseShellExecute = false;
    
    // Start the process
    var process = new Process();
    process.StartInfo = processInfo; 
    process.Start(processInfo);
    
    // Capture the output and wait for exit
    var output = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    
    // Parse the output
    var ports = Regex.Matches(output, ":([0-9]+):");
    foreach (Match port in ports)
    {
        // TODO: Do something with the ports here
        Console.WriteLine(port.Groups[1].Captures[0].Value);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 2017-04-25
      • 2015-06-21
      • 2016-04-23
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多