Win32Exception @ ServiceHost.Open () для службы WCF - PullRequest
3 голосов
/ 09 октября 2009

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

1 Ответ

4 голосов
/ 09 октября 2009

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

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

...