2009-08-03 36 views
9

我有一臺機器控制應用程序,其中有一臺客戶機和五臺服務器機箱在機器子網上進行通信。沒有域控制器。我想使用netTcpBinding來保證可靠性和事務支持。沒有Windows憑據的netTcpBinding?

當域控制器不存在時,是否可以對此綁定使用用戶名/密碼認證?我不想使用證書,因爲我不想管理900臺計算機(150臺機器)中不會連接到辦公室局域網的證書。

回答

10

是的,當然 - 但只限於使用消息安全性(而不是傳輸安全性)。定義你的綁定配置,如下所示:

<netTcpBinding> 
    <binding name="UserNameSecurity"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </netTcpBinding> 

,然後引用,在您的終端綁定配置(服務器和客戶端):

<endpoint address="....." 
      binding="netTcpBinding" 
      bindingConfiguration="UserNameSecurity" 
      contract="IMyService" /> 

馬克

UPDATE:
啊,是的,在服務器端,您需要一個證書來向調用它的客戶端驗證服務,並且還用於對消息進行加密+簽名。這隻在服務器上 - 客戶端不需要安裝任何東西。

配置:

<behaviors> 
    <serviceBehavior> 
    <behavior name="ServerInternet"> 
     <serviceCredentials> 
     <serviceCertificate 
      findValue="MyServiceCertificate" 
      storeLocation="LocalMachine" 
      storeName="My" 
      x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehavior> 
</behaviors> 
<services> 
    <service name="MyServiceInternet" 
      behaviorConfiguration="ServerInternet"> 
    .... 
    </service> 
</services> 

確保您的服務器上安裝服務器證書進入「本地計算機」文件夾,您在配置中指定的「主題名稱」下。

+0

所以,這就是我原來的。但是,我收到一個要求提供服務證書的例外情況:「服務證書未提供,請在ServiceCredentials中指定服務證書。」 任何想法? – 2009-08-03 16:15:40

+0

嗯。這就是我所懷疑的。感謝您的確認。 – 2009-08-03 17:41:04

0

你可以先嚐試一些東西。設置serviceNegotiationCredentials爲true:

<message negotiateServiceCredential="true"/> 

這將創建客戶端和服務之間的安全對話沒有域控制器。

但是,如果沒有任何域控制器,客戶端不信任你的服務,所以它會失敗。

所以你應該設置預期的identity of the service。你可以在你的服務的WSDL中找到它。默認情況下,如果你在IIS託管,這似乎是:

<client> 
    <endpoint> 
     <identity> 
      <servicePrincipalName value="host/NETWORKSERVICE"></servicePrincipalName> 
     </identity> 
    </endpoint> 
</client> 

我不認爲你需要它,但也許你必須允許在服務端匿名登錄:

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
      <windowsAuthentication allowAnonymousLogons="true"/> 
     </serviceCredentials> 
    </behavior> 
</serviceBehaviors>