2009-10-09 41 views
3

我正在爲我寫的一組WCF服務基礎結構編寫BDD規範。我注意到,我編寫的每個規範都涉及對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旗艦版系統上最爲嚴重。在Vista旗艦版系統中,它看起來並沒有造成太多的性能下降,但ServiceHost.Open()是執行時間的絕大部分。我不明白爲什麼當URL是本地主機時它是一個問題...我期望回送接口是最快的。

回答

4

問題不在於localhost與dns名稱......它與WCF調用TranslateName() API將服務的UPN標識從SAM兼容名稱(即DOMAIN \ user)轉換爲規範名稱相關,並抱怨說它無法連接到作爲輸入提供的SAM兼容名稱中指定的域。

不知道是什麼原因導致了這種情況,但可能是因爲您在UPN身份中指定了錯誤的域名,或者您的計算機的域名註冊存在問題,或者防火牆阻礙了您的工作。

+0

如果機器根本不在域上,該怎麼辦?我所測試的所有系統都只是默認WORKGROUP工作組的一部分。 – jrista 2009-10-09 14:13:20

+0

請問DNS是不是將您的計算機名稱解析爲本地IP,而是解析爲其他內容,以便操作系統解釋爲域名? – tomasr 2009-10-09 15:09:40

+0

我實際上沒有設置元素。我不確定它沒有明確設置時默認的內容。我會看到我能找到的。 – jrista 2009-10-09 15:38:08