2010-05-24 141 views
2

我正在使用web服务并使用httpWebRequest.create api连接它。如果我在80以外的IIS中更改TCP端口号,那么我的应用程序无法连接到它。如何在IIS中设置System.Url对象中的端口号,以便我的应用程序可以连接到Web服务。如何自定义默认的tcp端口号(80)

+0

也许包括你的问题,你正在寻找一种方式来确定端口号IIS在运行时设置为。 – Wazner 2016-08-02 11:25:01

回答

4

你通常通过添加端口,像这样做:

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

它确定,但我怎么知道什么端口号设置为IIS。我必须在运行时查询此端口号,以便我可以在URL中追加端口号 – 2010-05-25 12:08:57

+0

您的意思是您正在尝试连接到Web服务,但您不一定事先知道它要连接到哪个端口正在运行? – 2010-05-25 12:27:34

+0

假设我的Web服务abc映射到IIS中的默认Web站点。我使用http://localhost/abc/abc.asmx访问此Web服务。当时我能够连接到这个服务。假设一个去IIS,并且在默认网站下将端口号从默认值80更改为90并重新启动IIS。现在我来到我的应用程序,但这次它没有连接到Web服务,因为我仍然使用http://localhost/abc/abc.asmx而不知道什么是新的端口号。我的问题是有没有办法找到更改的端口号,以便我可以修改IIS – 2010-05-25 14:04:31

4

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

0

我认为,如果你的web服务的URI是http://webservice/那么你可能只是做http://webservice:1234其中1234是新的端口..

+0

中的新portnumber请求的Web服务地址,但我怎么知道什么端口号设置为IIS。我必须在运行时查询此端口号,以便我可以在URL中追加端口号 – 2010-05-25 12:09:53

+0

要在运行时查询,您需要有另一个为已知Web服务提供端口的Web服务。恕我直言,没有其他的选择,因为你不能不知道端口进行任何沟通。 – Salil 2010-05-25 12:14:02

+0

假设我的web服务abc映射到IIS中的默认网站。我使用http://localhost/abc/abc.asmx访问此Web服务。当时我能够连接到这个服务。假设一个去IIS,并且在默认网站下将端口号从默认值80更改为90并重新启动IIS。现在我来到我的应用程序,但这次它没有连接到Web服务,因为我仍然使用http://localhost/abc/abc.asmx而不知道什么是新的端口号。我的问题是有没有办法找到更改的端口号,以便我可以修改IIS – 2010-05-25 14:04:56

0
  • 使用WebRequest.Createstring parameter

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

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

中的新portnumber所请求的Web服务地址,但我怎么知道什么端口号设置为IIS。我必须在运行时查询此端口号,以便我可以相应地在URL中追加端口号 – 2010-05-25 12:09:24

0

认定远程计算机上运行的IIS的端口是不容易的。要么你需要有不同的沟通方式来沟通配置(比如服务),或者使用能检查所有可能端口的portscanner(不推荐)。

但是,如果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); 
}