Как инициализировать 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.