ChannelFactory Credentials + object is read only

channelfactory, credentials, wcf

Solution

Yes, the MSDN documentation is pretty clear:

C#
public ClientCredentials Credentials { get; }

The property only has a `get` accessor - no set accessor --> it's readonly.

Also in the MSDN docs:

Remarks The ClientCredentials object is stored as a type of endpoint behavior and can be accessed through the Behaviors property.

The OnOpened method initializes a read-only copy of the ClientCredentials object for the factory.

So what is it you're doing to do here??

UPDATE: you cannot set the user credentials that your client proxy is supposed to use on the channel factory. See this excellent blog post on how to do it anyway - with a bit of a detour:

- first, remove the default endpoint behavior from the factory

- secondly, instantiate your own credentials

thirdly, set those new credentials as new endpoint behavior on factory

// step one - find and remove default endpoint behavior 
var defaultCredentials = factory.Endpoint.Behaviors.Find<ClientCredentials>();
factory.Endpoint.Behaviors.Remove(defaultCredentials); 

// step two - instantiate your credentials
ClientCredentials loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = CServiceCredentials.Instance.Username;
loginCredentials.UserName.Password = “Password123″;

// step three - set that as new endpoint behavior on factory
factory.Endpoint.Behaviors.Add(loginCredentials); //add required ones

Seems a bit odd and complicated, but that seems to be the one and only way to achieve this!

Problem

Greetings, what is the problem that when I try to set credentials for my factory as follows: ``` ChannelFactory<IWCFSeekService> factory = Factory; if (factory != null) { factory.Credentials.UserName.UserName = CServiceCredentials.Instance.Username; _Channel = factory.CreateChannel(); } ``` I get an exception that object is read-only. It occurs when I want to set username.

Original source