Как инициализировать CoreWCF.OperationContext в модульных тестах?

У меня есть служба CoreWCF .NET 6 , которая возвращает пользовательские коды состояния HTTP с помощью этого кода:

var requestProp = new HttpResponseMessageProperty(); OperationContext.Current.OutgoingMessageProperties[HttpResponseMessageProperty.Name] = requestProp; requestProp.StatusCode = httpStatusCode;

Проблема в том, что я не могу инициализировать или имитировать OperationContext.Current в своих модульных тестах.

Это можно сделать в старой версии WCF .NET Framework 4.8, выполнив следующие действия:

var factory = new ChannelFactory<IManagementService>(new BasicHttpBinding(), new EndpointAddress("http://localhost/Program.Interface/ManagementService.svc")); OperationContext.Current = new OperationContext(factory.CreateChannel() as IContextChannel);

Это больше невозможно, так как **ChannelFactory ** принадлежит пакету System.ServiceModel , тогда как мой контракт службы IManagementService использует пакет **CoreWCF **.

Я также пытался использовать HttpContextAccessor, его легко использовать в модульных тестах , но код состояния HTTP не меняется в моем сервисе !

Кто-нибудь знает, как инициализировать CoreWCF.OperationContext в модульных тестах??

1 ответ

Попробуйте заставить IManagementService использовать атрибуты, определенные в пакете System.ServiceModel.Primitives, вместо атрибутов в CoreWCF. CoreWCF теоретически продолжит их использовать, хотя для них станет возможным вызывать ChannelFactory.

Другие вопросы по тегам