Я работаю над написанием спецификаций BDD для широкого набора сервисной инфраструктуры WCF, которую я пишу. Я заметил, что каждая спецификация, которую я пишу, включает вызов ServiceHost.Open(), эта строка выполняется за 2-6 секунд (время продолжает расти, поскольку я добавляю все больше и больше спецификаций). Я заметил, что при вызове этого метода выбрасывается исключение Win32Exception:
Win32Exception occurred
Message: The specified domain either does not exist or could not be contacted.
Stack Trace: at System.ServiceModel.UpnEndpointIdentity.GetUpnFromDownlevelName(String downlevelName)
NativeErrorCode: 1355
ErrorCode: -2147467259
Конфигурация ServiceModel выглядит следующим образом:
<system.serviceModel>
<services>
<service name="TestServices.Calculator" behaviorConfiguration="default">
<endpoint
name="calculator"
address=""
binding="wsHttpBinding"
contract="TestServiceContracts.ICalculator" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/calculator" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="default" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Примечание. Я настроил Http.sys и добавил http://+:80/calculator/ в качестве http исключение пространства имен, так что это не является частью проблемы.
Эта ошибка наиболее серьезна в системе Windows 7 Ultimate. В системе Vista Ultimate это, похоже, не вызывает такого большого снижения производительности, однако ServiceHost.Open() занимает большую часть времени, затрачиваемого на выполнение. Я не понимаю, почему это вообще проблема, когда URL-адреса являются локальными... Я ожидаю, что петлевой интерфейс будет самым быстрым из всех.