Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting "Object is read only" error when setting ClientCredentials in WCF

Tags:

I have a proxy object generated by Visual Studio (client side) named ServerClient. I am attempting to set ClientCredentials.UserName.UserName/Password before opening up a new connection using this code:

InstanceContext context = new InstanceContext(this);  m_client = new ServerClient(context); m_client.ClientCredentials.UserName.UserName = "Sample"; 

As soon as the code hits the UserName line it fails with an "Object is read-only" error. I know this can happen if the connection is already open or faulted, but at this point I haven't called context.Open() yet.

I have configured the Bindings (which uses netTcpBinding) to use Message as it's security mode, and MessageClientCredentialType is set to UserName.

Any ideas?

like image 312
Paul Mrozowski Avatar asked Oct 13 '08 20:10

Paul Mrozowski


2 Answers

I noticed that after creating an instance of the proxy class for the service, I can set the Username and Password once without errors and do a successful call to my webservice. When I then try to set the Username and Password again on the existing instance (unnecessary of course) I get the 'Object is Read-Only' error you mentioned. Setting the values once per instance lifetime worked for me.

like image 160
Gerhard Avatar answered Oct 01 '22 04:10

Gerhard


It appears that you can only access these properties pretty early in the instanciation cycle. If I override the constructor in the proxy class (ServerClient), I'm able to set these properties:

base.ClientCredentials.UserName.UserName = "Sample"; 

I'm beginning to appreciate the people who suggest not using the automatically built proxies provided by VS.

like image 39
Paul Mrozowski Avatar answered Oct 01 '22 02:10

Paul Mrozowski