如何在 WCF 自动发现中获取 IP 地址
How to get IP address in WCF Auto Discovery
我添加了以下功能来自动发现 Intranet 中的 WCF 服务。
private void AutoDiscovery(FindCriteria cirteria)
{
try
{
UdpDiscoveryEndpoint udp = new UdpDiscoveryEndpoint();
using (DiscoveryClient discoveryClient = new DiscoveryClient(udp))
{
cirteria.Duration = TimeSpan.FromSeconds(5);
FindResponse response = discoveryClient.Find(cirteria);
if (response.Endpoints.Count > 0)
{
foreach (EndpointDiscoveryMetadata point in response.Endpoints)
{
string address = point.Address.Uri.ToString();
// net.tcp//computer1:8081/wcfService
}
}
}
}
catch(Exception e)
{
}
}
测试时,return地址为net.tcp//computer1:8081/wcfService
。虽然我可以使用 Dns.GetHostAddress
获取 ip 地址,但由于 DNS 问题,在本地 Intranet 中需要很长时间。
有什么发现的时候可以直接获取ip地址吗?
我认为你的想法是最好的解决方案,使用DNS.GetHostAddress来获取服务器的实际IP地址。它应该只能由域名系统来完成。 DiscoveryClient仅return服务器端定义的服务端点地址,仅适用于控制台应用程序托管的服务。
<service name="ConsoleApp3.TestService">
<!--the below service endpoint address is returned as defined here-->
<endpoint address="http://10.157.13.69:6666" binding="wsHttpBinding" contract="ConsoleApp3.ITestService" ></endpoint>
<!--this line code will return domain-->
<!--<endpoint address="http://vabqia969vm:6666" binding="wsHttpBinding" contract="ConsoleApp3.ITestService"></endpoint>-->
<!--for exposing the service-->
<endpoint kind="discoveryEndpoint" address="http://10.157.13.69:6666/exterior" binding="wsHttpBinding" ></endpoint>
</service>
对于托管在IIS 中的服务,无论站点绑定的类型如何,都只return 域名。在这种情况下,我们只能利用DNS了。
foreach (EndpointDiscoveryMetadata item in response.Endpoints)
{
//retrieve IP address
System.Net.IPHostEntry hostinfo = System.Net.Dns.GetHostEntry(item.Address.Uri.Host);
string IPAddress = hostinfo.AddressList[2].ToString();
Console.WriteLine(IPAddress);
}
如果有什么我可以帮忙的,请随时告诉我。
我添加了以下功能来自动发现 Intranet 中的 WCF 服务。
private void AutoDiscovery(FindCriteria cirteria)
{
try
{
UdpDiscoveryEndpoint udp = new UdpDiscoveryEndpoint();
using (DiscoveryClient discoveryClient = new DiscoveryClient(udp))
{
cirteria.Duration = TimeSpan.FromSeconds(5);
FindResponse response = discoveryClient.Find(cirteria);
if (response.Endpoints.Count > 0)
{
foreach (EndpointDiscoveryMetadata point in response.Endpoints)
{
string address = point.Address.Uri.ToString();
// net.tcp//computer1:8081/wcfService
}
}
}
}
catch(Exception e)
{
}
}
测试时,return地址为net.tcp//computer1:8081/wcfService
。虽然我可以使用 Dns.GetHostAddress
获取 ip 地址,但由于 DNS 问题,在本地 Intranet 中需要很长时间。
有什么发现的时候可以直接获取ip地址吗?
我认为你的想法是最好的解决方案,使用DNS.GetHostAddress来获取服务器的实际IP地址。它应该只能由域名系统来完成。 DiscoveryClient仅return服务器端定义的服务端点地址,仅适用于控制台应用程序托管的服务。
<service name="ConsoleApp3.TestService">
<!--the below service endpoint address is returned as defined here-->
<endpoint address="http://10.157.13.69:6666" binding="wsHttpBinding" contract="ConsoleApp3.ITestService" ></endpoint>
<!--this line code will return domain-->
<!--<endpoint address="http://vabqia969vm:6666" binding="wsHttpBinding" contract="ConsoleApp3.ITestService"></endpoint>-->
<!--for exposing the service-->
<endpoint kind="discoveryEndpoint" address="http://10.157.13.69:6666/exterior" binding="wsHttpBinding" ></endpoint>
</service>
对于托管在IIS 中的服务,无论站点绑定的类型如何,都只return 域名。在这种情况下,我们只能利用DNS了。
foreach (EndpointDiscoveryMetadata item in response.Endpoints)
{
//retrieve IP address
System.Net.IPHostEntry hostinfo = System.Net.Dns.GetHostEntry(item.Address.Uri.Host);
string IPAddress = hostinfo.AddressList[2].ToString();
Console.WriteLine(IPAddress);
}
如果有什么我可以帮忙的,请随时告诉我。