gpt4 book ai didi

c# - 您如何区分应用程序端点和基础设施端点?

转载 作者:行者123 更新时间:2023-11-30 22:43:18 25 4
gpt4 key购买 nike

我正在为 WCF 创建一个自定义行为,它(出于互操作性原因)只能在服务公开单个应用程序端点时正常运行。

我希望能够使用 IServiceBehavior.Validate检查服务是否仅公开一个应用程序端点的方法。目前我正在做以下事情:

public void Validate(
ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
if (serviceDescription.Endpoints.Count > 1)
{
throw new InvalidOperationException();
}
}
不幸的是,

serviceDescription.Endpoints 包含所有 端点,包括IMetadataExchange 端点。这会导致验证在完全有效的服务上失败。

我需要的是一种只计算应用程序(非基础结构)端点的方法,但我找不到 WCF 本身如何确定哪些是哪些。

最佳答案

在解决这个问题的同时,我设法重现了臭名昭著的:

Service 'Service' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.

异常显示在 System.ServiceModel.Description.DispatchBuilder 对象上调用方法 EnsureThereAreNonMexEndpoints 导致抛出异常。

使用 Reflector 深入研究此方法,我对以下表达等效功能的实现进行了逆向工程:

private void EnsureThereAreNonMexEndpoints(ServiceDescription description)
{
foreach (ServiceEndpoint endpoint in description.Endpoints)
{
if (endpoint.Contract.ContractType != typeof(IMetadataExchange))
{
return;
}
}

throw InvalidOperationException();
}

WCF 认为基础结构的唯一终结点似乎是 IMetadataExchange。呵呵。

你知道的越多。

关于c# - 您如何区分应用程序端点和基础设施端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016170/

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