gpt4 book ai didi

c# - 从 ServiceHost 获取端口号

转载 作者:可可西里 更新时间:2023-11-01 02:45:23 25 4
gpt4 key购买 nike

我正在创建一个带有端口 0 的 WCF ServiceHost 以获得动态分配的端口:

ServiceHost host = new ServiceHost(typeof(MyClass), new Uri("net.tcp://localhost:0/abc"));
host.AddServiceEndpoint(typeof(MyInterface), new NetTcpBinding(SecurityMode.None), "net.tcp://localhost:0/abc");

如何获取分配的端口号?

我试过:

host.ChannelDispatchers[0].Listener.Uri.Port

但它只返回 0,这可能是错误的。

最佳答案

好吧,我想我明白了。您需要确保将监听 URI 行为设置为唯一并将其打开。默认情况下,它设置为显式。

我制作了一个伪造的服务类,其中包含以下服务契约:

[ServiceContract]
public class MyClass
{
[OperationContract]
public string Test()
{
return "test";
}
}

并添加了相应的测试类:

[TestClass]
public class TestMyClass
{
[TestMethod]
public string TestPortIsNotZero(){
var host = new ServiceHost(typeof(MyClass),
new Uri("net.tcp://localhost:0/abc"));
var endpoint = host.AddServiceEndpoint(typeof(MyClass),
new NetTcpBinding(SecurityMode.None), "net.tcp://localhost:0/abc");
//had to set the listen uri behavior to unique
endpoint.ListenUriMode = ListenUriMode.Unique;
//in addition open the host
host.Open();

foreach (var cd in host.ChannelDispatchers)
{
//prints out the port number in the dynamic range
Debug.WriteLine(cd.Listener.Uri.Port);
Assert.IsTrue(cd.Listener.Uri.Port >= 0);
}
}
}

关于c# - 从 ServiceHost 获取端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com