Я настроил интеграционный тест, который имитирует производственное использование службы WCF.
Код запускается под именем тестовой учетной записи пользователя в нашем активном каталоге.Тестовый пользователь является членом группы администраторов на сервере сборки (работает TeamCity 5.1.3).
Служба WCF в этом случае размещается в консольном приложении и запускается тестом следующим образом:
private const string _uri = "net.tcp://127.0.0.1:8090/bpaic";
private const string _tns = "tstdaily";
...
_wcfProcessHandle = Process.Start(new ProcessStartInfo {
FileName = _serviceRunnerPath,
Arguments = "\"{0}\" \"{1}\"".FormatWith( _uri, _tns ),
UseShellExecute = false,
Domain = Config.Domain,
UserName = Config.UserName,
Password = Config.UserPassword.ToSecureString()
});
Вызов File.Exists
гарантирует наличие исполняемого файла, определенного _serviceRunnerPath
.
Ошибка проявляется в журнале сервера сборки следующим образом:
Тест (ы) не пройден.System.InvalidOperationException: не удалось обработать запрос, поскольку процесс (4332) завершился.в System.Diagnostics.Process.GetProcessHandle (доступ Int32, Boolean throwIfExited) в System.Diagnostics.Process.Kill ()
в BondPriceAndInterestCalculator.IntegrationTests.Performance.MimicFMSTest.KillWcf \ агент службы:\ работа \ 40cccfdaa4a1ba8 \ BondPriceAndInterestCalculator.IntegrationTests \ Performance \ MimicFMSTest.cs: строка 74 в BondPriceAndInterestCalculator.IntegrationTests.Performance.MimicFMSTest.Calculat1000PricesAnd1000OutstandingInterestsInParalell () в D: \ Teamcity Agents \ Server Agent 1 \ работа \ 40cccfdaa4a1ba8 \ BondPriceAndInterestCalculator.IntegrationTests \ Performance \MimicFMSTest.cs: строка 69 ------- Stdout: ------- Необработанное исключение в удаленном домене приложения: System.ServiceModel.EndpointNotFoundException: Не удалось подключиться к net.tcp: //127.0.0.1: 8090 /bpaic.Попытка подключения продолжалась в течение промежутка времени 00: 00: 01.0673145.Код ошибки TCP 10061: не удалось установить соединение, потому что целевая машина активно отказала ему в 127.0.0.1:8090.---> System.Net.Sockets.SocketException: не удалось установить соединение, поскольку целевая машина активно отказала ему в 127.0.0.1:8090 в System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.Sockets.Socket.Connect (EndPoint remoteEP) в System.ServiceModel.Channels.SocketConnectionInitiator.Connect (Uri uri, TimeSpan timeout) --- Конец внутренней трассировки стека исключений ---
Т.е.,исключение возникает не во время запуска процесса, а при попытке завершить работу службы после запуска теста.Служба не зарегистрировала никаких работ, поэтому я предполагаю, что она никогда не могла обслуживать запросы.
На моей машине все работает нормально (слышал это раньше? ;-)), но служба WCF не получаетзапущен на сервере сборки.
Чего не хватает?