我有一个由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。
有什么想法吗?
发布于 2008-10-14 13:43:12
看起来您只能在实例化周期的早期访问这些属性。如果我覆盖代理类(ServerClient)中的构造函数,我就能够设置这些属性:
base.ClientCredentials.UserName.UserName = "Sample";
我开始感谢那些建议不要使用VS提供的自动构建代理的人。
发布于 2012-11-03 06:56:59
我注意到,在为服务创建代理类的实例后,我可以设置一次用户名和密码而不会出错,并成功调用我的set服务。然后,当我尝试在现有实例上再次设置用户名和密码时(当然不必要),我得到您提到的'Object is Read-Only‘错误。为每个实例生命周期设置一次值对我来说很有效。
发布于 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);
https://stackoverflow.com/questions/199014
复制相似问题