用于WCF服务的Win32Exception @ ServiceHost.Open()

时间:2009-10-09 07:07:44

标签: wcf performance servicehost win32exception

我正在为我正在编写的广泛的WCF服务基础架构编写BDD规范。我注意到我编写的每个规范都涉及对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 个答案:

答案 0 :(得分:4)

问题不在于localhost vs dns名称...它与WCF调用TranslateName() api以将服务的UPN身份从SAM兼容名称(即DOMAIN \ user)转换为规范名称,并抱怨它无法连接到SAM-Compatible名称中指定的域作为输入。

不确定是什么导致这种情况,但可能是您在UPN身份中以某种方式指定了错误的域名,或者您的计算机的域名注册出现了问题,或者防火墙正在阻碍。