Несколько дней назад я открыл вопрос, если мне удастся получить ответы. Я не очень хорошо сфокусировал этот вопрос, и теперь с чем-то большим знанием спрашиваю снова.
Мне нужно зафиксировать ошибки всех моих конечных точек, чтобы они были включены в один и тот же сайт. Идея состоит в том, чтобы добавить поведение к этим конечным точкам.
namespace SIPE.Search.Helpers
{
/// <summary>
/// Implements methods that can be used to extend run-time behavior for an endpoint in either a client application.
/// </summary>
public class ExternalClientBehavior : BehaviorExtensionElement
{
protected override object CreateBehavior()
{
return new ExternalClientBehaviorClass();
}
public override Type BehaviorType
{
get
{
return typeof(ExternalClientBehaviorClass);
}
}
/// <summary>
/// JSON REST[GET] Converter Behavior
/// </summary>
private class ExternalClientBehaviorClass : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
ExternalClientMessageInspector clientInspector = new ExternalClientMessageInspector(endpoint);
clientRuntime.MessageInspectors.Add(clientInspector);
foreach (ClientOperation op in clientRuntime.Operations)
{
op.ParameterInspectors.Add(clientInspector);
}
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
//("Behavior not supported on the consumer side!");
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
}
}
Теперь я знаю, что он никогда не войдет в мой ApplyDispatchBehaviour, если клиент не реализует мое поведение, и это НИКОГДА не произойдет, так как они являются внешними поставщиками, и у меня нет доступа к коду.
Кроме того, моя первая ошибка даже не покидает мой код, поскольку я вызываю ошибку NOT FOUND.
Я нашел много похожих источников с моей проблемой без решения. Я нашел на нескольких сайтах добавить следующее в ApplyClientBehaviour:
IErrorHandler errorHandler = new CustomErrorHandler();
clientRuntime.CallbackDispatchRuntime.ChannelDispatcher.ErrorHandlers.Add(errorHandler);
Но это не работает.
Другие источники, которые произошли со мной: https://riptutorial.com/csharp/example/5460/implementing-ierrorhandler-for-wcf-services
Это НЕ решение, так как оно относится к поведению служб. Мне нужно сделать это в EndPoint Behavior.
Спасибо