Я работаю над написанием спецификаций BDD для широкого набора инфраструктуры обслуживания WCF, которую я пишу. Я заметил, что каждая спецификация, которую я пишу, включает вызов ServiceHost.Open(), эта строка занимает 2-6 секунд для выполнения (время продолжает расти, когда я добавляю все больше и больше спецификаций). Я заметил, что, когда этот метод называют, Win32Exception брошен:Win32Exception @ ServiceHost.Open() для службы WCF
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 ... Я бы ожидал, что интерфейс loopback будет самым быстрым из всех.
Что делать, если машина не находится в домене? Все тестируемые системы просто являются частью рабочей группы WORKGROUP по умолчанию. – jrista
Возможно, DNS не разрешает имя вашего компьютера локальному IP-адресу, а вместо этого разрешает что-то еще, чтобы ОС интерпретировалась как доменное имя? – tomasr
Я фактически не установил элемент. Я не уверен, что он по умолчанию, когда он явно не установлен. Я посмотрю, что я могу найти. –
jrista