2012-09-20 16 views
11

Sto cercando di utilizzare un servizio WCF:Come posso impostare ClientCredentials?

La configurazione del servizio è:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <netNamedPipeBinding> 
       <binding name="netNamedPipeEndpoint" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
        hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" 
        maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport protectionLevel="EncryptAndSign" /> 
        </security> 
       </binding> 
      </netNamedPipeBinding> 
      <netTcpBinding> 
       <binding name="netTcpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" 
        transferMode="Buffered" transactionProtocol="OleTransactions" 
        hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" 
        maxReceivedMessageSize="65536"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="None"> 
         <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> 
         <message clientCredentialType="Windows" /> 
        </security> 
       </binding> 
      </netTcpBinding> 
      <wsHttpBinding> 
       <binding name="wsHttpBindingConfiguration" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
        allowCookies="false"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="None"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
        </security> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="net.tcp://webapppro-v11/FlightInfoWebService/FlightInfoService.svc" 
       binding="netTcpBinding" bindingConfiguration="netTcpEndpoint" 
       contract="FlightInfoService" name="netTcpEndpoint" /> 
      <endpoint address="net.pipe://webapppro-v11/FlightInfoWebService/FlightInfoService.svc" 
       binding="netNamedPipeBinding" bindingConfiguration="netNamedPipeEndpoint" 
       contract="FlightInfoService" name="netNamedPipeEndpoint" /> 
      <endpoint address="http://webapppro-v11/FlightInfoWebService/FlightInfoService.svc" 
       binding="wsHttpBinding" bindingConfiguration="wsHttpBindingConfiguration" 
       contract="FlightInfoService" name="wsHttpBindingConfiguration" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Quando provo a chiamare il servizio:

public async void LoadCities() 
{ 
    _client = new FlightInfoServiceClient(Maquette_MyAirport_Win8.FlightService.FlightInfoServiceClient.EndpointConfiguration.wsHttpBindingConfiguration, "http://servuucs.fr/FlightInfoWebService/FlightInfoService.svc"); 

    var citiesResponse = await _client.GetAllCitiesAsync(new BaseRequest()); 
    var myCities = citiesResponse.Cities; 
} 

prendo questa eccezione:

ERROR: UnAuthorizedAccess description:You are not authorized to access this service

Come posso impostare ClientCredentials?

+3

'_client.ClientCredentials' – Paciv

+2

Si prega di inviare l'intero' 'config. Inoltre, si prega di formattarlo in modo che sia leggibile. Non fare affidamento sulla comunità per correggere la tua formattazione. Grazie –

+0

Ho aggiornato la mia configurazione, qualche suggerimento per favore? – user1428798

risposta

22

Come @Paciv indicato in un commento, è possibile farlo tramite codice. impostarle con la proprietà ClientCredentials.Windows, qualcosa di simile:

_client.ClientCredentials.Windows.ClientCredential.Domain = "warzone42"; 
_client.ClientCredentials.Windows.ClientCredential.UserName = "user1428798"; 
_client.ClientCredentials.Windows.ClientCredential.Password = "[email protected]"; 

Impostazione delle credenziali in codice è ovviamente poco saggio. Se non si imposta l'utente Windows a livello di programmazione come sopra, ritengo che le credenziali dell'utente che esegue il client siano state inviate in tutta (che è forse una situazione più tipica?).

Si noti che se si impostano le credenziali nel codice si può infatti cercare UserName authentication.

+0

Questo non risolve il mio problema! – user1428798

+6

Potrebbe essere. Ma risponde alla tua domanda ("Come posso impostare le credenziali del cliente?"), Però. – Jeroen

+0

[https://social.msdn.microsoft.com/Forums/vstudio/en-US/0aac0110-187e-4a00-a597-f15b768cf16c/passing-client-credentials-to-wcf-service](https://social .msdn.microsoft.com/Forums/vstudio/it-it/0aac0110-187e-4a00-a597-f15b768cf16c/passing-client-credentials-to-wcf-service) – liuhongbo

Problemi correlati