Win32Exception @ ServiceHost.Open() для службы WCF

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


person jrista    schedule 09.10.2009    source источник


Ответы (1)


Проблема не в имени localhost и dns... она связана с тем, что WCF вызывает ссылку TranslateName() API для преобразования идентификатора UPN службы из имени, совместимого с SAM (т. имя, совместимое с SAM, представленное в качестве входных данных.

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

person tomasr    schedule 09.10.2009
comment
Что делать, если машина вообще не в домене? Все системы, которые я тестирую, являются просто частью рабочей группы WORKGROUP по умолчанию. - person jrista; 09.10.2009
comment
Может ли быть так, что DNS не разрешает имя вашей машины в локальный IP-адрес, а вместо этого разрешает что-то еще, чтобы ОС интерпретировала как доменное имя? - person tomasr; 09.10.2009
comment
На самом деле я не установил элемент ‹identity›. Я не уверен, что он используется по умолчанию, когда он не установлен явно. Я посмотрю, что я могу найти. - person jrista; 09.10.2009
comment
Это действительно оказалось проблемой. Присоединение к домену в моей рабочей системе значительно сократило время запуска. Спасибо! - person jrista; 15.10.2009