2009-10-09 3 views
3

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

ответ

4

Проблема связана не с localhost vs dns name ... она связана с WCF, вызывающим api TranslateName() api, чтобы преобразовать идентификатор UPN службы из SAM-совместимого имени (то есть DOMAIN \ user) в каноническое имя, и жалуется, что он не может подключиться к домену, указанному в SAM-совместимом имени, представленном в качестве входных данных.

Не знаете, что может быть причиной этого, но может быть, что вы каким-то образом указали неправильный домен в своей идентификации UPN, или что-то не так с регистрацией домена вашего компьютера, или брандмауэр мешает.

+0

Что делать, если машина не находится в домене? Все тестируемые системы просто являются частью рабочей группы WORKGROUP по умолчанию. – jrista

+0

Возможно, DNS не разрешает имя вашего компьютера локальному IP-адресу, а вместо этого разрешает что-то еще, чтобы ОС интерпретировалась как доменное имя? – tomasr

+0

Я фактически не установил элемент . Я не уверен, что он по умолчанию, когда он явно не установлен. Я посмотрю, что я могу найти. – jrista

Смежные вопросы