首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在WCF中设置ClientCredentials时出现"Object is read only“错误

在WCF中设置ClientCredentials时出现"Object is read only“错误
EN

Stack Overflow用户
提问于 2008-10-13 20:57:31
回答 12查看 28.6K关注 0票数 21

我有一个由Visual Studio (客户端)生成的名为ServerClient的代理对象。在使用以下代码打开新连接之前,我正在尝试设置ClientCredentials.UserName.UserName/Password:

InstanceContext context = new InstanceContext(this);

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

一旦代码命中UserName行,它就会失败,并显示"Object is read-only“错误。我知道如果连接已经打开或出错,就会发生这种情况,但在这一点上,我还没有调用context.Open()。

我已经将绑定(使用netTcpBinding)配置为使用消息作为其安全模式,并将MessageClientCredentialType设置为UserName。

有什么想法吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-10-14 13:43:12

看起来您只能在实例化周期的早期访问这些属性。如果我覆盖代理类(ServerClient)中的构造函数,我就能够设置这些属性:

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

我开始感谢那些建议不要使用VS提供的自动构建代理的人。

票数 10
EN

Stack Overflow用户

发布于 2012-11-03 06:56:59

我注意到,在为服务创建代理类的实例后,我可以设置一次用户名和密码而不会出错,并成功调用我的set服务。然后,当我尝试在现有实例上再次设置用户名和密码时(当然不必要),我得到您提到的'Object is Read-Only‘错误。为每个实例生命周期设置一次值对我来说很有效。

票数 15
EN

Stack Overflow用户

发布于 2009-06-29 14:19:28

以下是解决方案:

using SysSvcmod = System.ServiceModel.Description;

SysSvcmod.ClientCredentials clientCredentials = new SysSvcmod.ClientCredentials();
clientCredentials.UserName.UserName = "user_name";
clientCredentials.UserName.Password = "pass_word";

m_client.ChannelFactory.Endpoint.Behaviors.RemoveAt(1);
m_client.ChannelFactory.Endpoint.Behaviors.Add(clientCredentials);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/199014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档