У меня есть проблема, связанная с созданием экземпляра WCF ServiceHost с набором модульных тестов и проектом, встроенным в интеграционную сборку в TFSBuild. Код, использованный в модульном тесте:
[TestMethod]
public void Service_Can_Be_Dynamically_Hosted()
{
ServiceHost host = new ServiceHost(typeof(DiscoveryService));
host.Open();
host.Close();
}
Конфигурация для службы, хотя она может быть создана непосредственно с помощью кода, находится в файле .config, содержащем следующую информацию:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="TappingBoard.Core.Network.DiscoveryServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TappingBoard.Core.Network.DiscoveryServiceBehavior"
name="TappingBoard.Core.Network.Services.DiscoveryService">
<endpoint address="" binding="wsHttpBinding" contract="TappingBoard.Core.Network.Services.IDiscoveryService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/TappingBoard/DiscoveryService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Модульный тест прекрасно работает на клиентских машинах, причем как локальные, так и не администраторские пользователи выполняют тесты. В случае сервера сборки TFS пользователь, запускающий сборку, называется TFSBuild и является членом группы пользователей домена и локальным администратором на сервере сборки TFS.
Выполнение того же модульного теста на сервере сборки запускает следующее исключение:
System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8001/TappingBoard/DiscoveryService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied
Поскольку сервер сборки TFS использует порт 80 для предоставления некоторых отчетов и веб-сайтов через IIS, я изменил порт, который будет использоваться службой WCF, на 8001. Ранее он также не работал с портом 80.
Есть ли возможность запустить этот тест на сервере сборки TFS? Должен ли я настроить что-нибудь дополнительное в моей сборке?
В плане предоставления наиболее полезной информации используются следующие системы:
- Dev Machines: VS2010TS, Windows 7RTM
- Серверные машины: TFS2010, Windows Server 2008 R2 RTM
Заранее спасибо за ваше время и поддержку.
Bests,
Мигель.