wcf - 如何从 DynamicEndpoint 获取 WCF 服务地址
问题描述
我创建了一个 DynamicEndpoint 来自动查找 WCF 服务。
namespace Client
{
class Program
{
static void Main(string[] args)
{
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(ICalculator)), new NetTcpBinding());
using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(dynamicEndpoint))
{
ICalculator caculate = channelFactory.CreateChannel();
Console.WriteLine("x + y = {2} when x = {0} and y = {1}", 4, 9, caculate.Add(4, 9));
Console.WriteLine("Find service, the service address is: " + dynamicEndpoint.Address.Uri);
}
Console.Read();
}
}
}
问题是当我尝试打印服务地址时,返回值为
http://schemas.microsoft.com/discovery/dynamic
那不是我发布的真实服务地址。
1、如何获取真实的服务地址?
2. 如果有多个服务可用,DynamicEndpoint 会选择哪一个?我可以获得地址数组或列表吗?
解决方案
据我所知,我们无法在客户端获得实际使用端点。除了我们使用 OperationContext 对象,它提供对服务方法的执行上下文的访问。
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.operationcontext?redirectedfrom=MSDN&view=netframework-4.7.2
例如,我们可以参考以下代码来获取实际的端点。
服务器。
public string GetAddress()
{
OperationContext oc = OperationContext.Current;
string result=oc.Channel.LocalAddress.Uri.ToString();
return result;
}
客户。
ChannelFactory<IService> factory = new ChannelFactory<IService>(dynamicEndpoint);
IService sv = factory.CreateChannel();
Console.WriteLine(sv.GetAddress());
此外,我不认为动态端点可以列出已找到的端点。动态端点将服务发现与服务调用合并。当使用动态端点调用服务时,它将依赖 FindCriteria 属性来查找服务端点,然后调用它。
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.discovery.dynamicendpoint?view=netframework-4.7.2
https://docs.microsoft.com/en-us/dotnet/api /system.servicemodel.discovery.findcriteria?view=netframework-4.7.2
推荐阅读
- angular - 角度 6 错误对象为空以处理异常
- php - 如何循环遍历 mysql 查询的结果并将它们显示在 html 表单的选项值中
- javascript - 导入和使用 NPM 包
- playframework - 创建actor时的新play 2.6 application.conf默认值和最佳实践
- c# - 以相反的顺序将数组值传递给另一个数组
- .net-core - .Net Core Debug Logger 在日志级别打印工件
- c - 使用 libtiff 在 C 中读取 .tif 图像返回一列
- python - seq[pos:pos + size] for pos in range(0, len(seq), size) 在 Python 中做了什么?
- python - 如何在股票预测的实际实践中使用训练有素的深度学习代码
- javascript - 在组件构造函数之外使用时变量未定义