在WCF中设置ClientCredentials时出现“Object is read only”错误如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个由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)配置为使用Message,因为它是安全模式,并且MessageClientCredentialType设置为UserName。

有任何想法吗?

提问于
用户回答回答于

看起来你只能在实例化周期的早期才能访问这些属性。如果我重写代理类(ServerClient)中的构造函数,我可以设置这些属性:

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

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

用户回答回答于

我注意到,在为服务创建代理类的实例之后,我可以无错地设置用户名和密码,并成功地调用我的web服务。当我然后尝试在现有实例上重新设置用户名和密码(当然不必要),我得到了你提到的'Object is Read-Only'错误。每个实例的生命周期设置一次值为我工作。

扫码关注云+社区