C# · 12月 26, 2021

c# – 如何设置ClientCredentials?

我正在尝试使用WCF服务:

该服务的配置是:

<?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>

当我尝试呼叫服务时:

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;}

我抓住这个例外:

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

如何设置我的ClientCredentials?

解决方法 正如@Paciv在评论中指出的,你可以通过代码来实现.使用属性 ClientCredentials.Windows设置它们,像这样: _client.ClientCredentials.Windows.ClientCredential.Domain = “warzone42”;_client.ClientCredentials.Windows.ClientCredential.UserName = “user1428798”;_client.ClientCredentials.Windows.ClientCredential.Password = “p@ssw0rd”;

在代码中设置凭据当然是不明智的.如果您没有以上述方式以编程方式设置Windows用户,我相信运行客户端的用户的凭据会被发送(这可能是更典型的情况?).

请注意,如果您在代码中设置凭据,您可能实际上正在寻找UserName authentication.