Я работаю над написанием спецификаций 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-адреса являются localhost ... Я ожидаю, что петлевой интерфейс будет самым быстрым из всех.