2009-12-20 21 views
0

我在C#中使用Java WS的應用程序。一切正常,直到WS被配置爲使用身份驗證。現在我應該用戶登錄我的密碼從WS執行方法,但我不知道該怎麼做。 我已經嘗試在Java上驗證問題ws

var client = new MyBeanClient(); 
        client.ClientCredentials.UserName.UserName = "admin"; 
        client.ClientCredentials.UserName.Password = ""; 
        client.addConsumer("whatever", "", "", ""); 

,但我得到 SecurityMessageException - {「HTTP請求是未經授權的客戶端 認證方案‘匿名’從 收到的認證報頭中的服務器是‘協商,NTLM’。」 } InnerException - (WebException) - {「遠程服務器返回錯誤: (401)未經授權。」}。

怎麼了?

感謝

回答

0

試試這個:

var credentialCache = new CredentialCache(); 
var credentials = new NetworkCredential("username", "password", "domain"); 
credentialCache.Add(new Uri(client.Url), "NTLM", credentials); 
client.Credentials = credentialCache; 
client.addConsumer("whatever", "", "", ""); 

UPDATE:

對不起我的第一篇我還以爲你使用 wsdl.exe生成客戶端代理。對於WCF客戶需要配置端點:

var basicHttpBinding = new BasicHttpBinding(); 
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
var endpoint = new EndpointAddress("http://example.com/myWindowsAuthN"); 
var client = new MyBeanClient(basicHttpBinding, endpoint); 
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 

client.ChannelFactory.Credentials.Windows.ClientCredential.Domain = "domain"; 
client.ChannelFactory.Credentials.Windows.ClientCredential.UserName = "username"; 
client.ChannelFactory.Credentials.Windows.ClientCredential.Password = "password"; 


UPDATE2:

我用下面的配置來調用與NTLM身份驗證保護的web服務。在客戶端的app.config把下面:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="NtlmBinding"> 
     <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Ntlm" /> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint 
     address="http://example.com/SomeWindowsAuthenticatedService" 
     binding="basicHttpBinding" 
     bindingConfiguration="NtlmBinding" 
     contract="IOperationContractOfTheService" 
     name="WSTestSoap" /> 
    </client> 
</system.serviceModel> 

,然後你可以調用方法之前設置相應的憑據:

using (var client = new MyBeanClient()) 
{ 
    client.ChannelFactory.Credentials.Windows.ClientCredential = 
     new NetworkCredential("username", "password", "DOMAIN"); 
    client.addConsumer("whatever", "", "", ""); 
} 
+0

不幸的是在客戶端沒有證書字段。只有ClientCredentials屬性,但它是隻讀的:/也客戶端沒有屬性Url:/ – arek 2009-12-20 09:58:05

+0

仍然有同樣的問題:/ SecurityMessageException:/ – arek 2009-12-20 11:00:16

+0

嗨, 謝謝你的答案。你能告訴我,我應該寫「DOMAIN」嗎? – arek 2009-12-21 13:39:52