代码之家  ›  专栏  ›  技术社区  ›  jrista

wcf服务的win32exception@servicehost.open()。

  •  3
  • jrista  · 技术社区  · 15 年前

    我正在为我正在编写的一系列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终极系统上,它似乎不会造成太大的性能损失,但是servicehost.open()是执行过程中花费的大量时间。我不明白当URL是本地主机时,为什么这是一个问题…我希望环回接口是最快的。

    1 回复  |  直到 15 年前
        1
  •  4
  •   tomasr    15 年前

    本地主机与DNS名称之间没有问题…它与WCF调用 TranslateName() API将服务的UPN标识从兼容SAM的名称(即域\用户)转换为规范名称,并抱怨它无法连接到作为输入显示的兼容SAM名称中指定的域。

    不确定是什么导致了这种情况,但可能是您在UPN标识中指定了一个错误的域,或者您的计算机的域注册有问题,或者防火墙阻碍了这一点。