Pau*_*ski 18 wcf visual-studio
我有一个名为ServerClient的Visual Studio(客户端)生成的代理对象.我试图在使用此代码打开新连接之前设置ClientCredentials.UserName.UserName/Password:
InstanceContext context = new InstanceContext(this);
m_client = new ServerClient(context);
m_client.ClientCredentials.UserName.UserName = "Sample";
Run Code Online (Sandbox Code Playgroud)
一旦代码命中UserName行,它就会失败并显示"Object is read-only"错误.我知道如果连接已经打开或出现故障会发生这种情况,但此时我还没有调用context.Open().
我已将Bindings(使用netTcpBinding)配置为使用Message作为其安全模式,并将MessageClientCredentialType设置为UserName.
有任何想法吗?
小智 13
我注意到在为服务创建代理类的实例后,我可以设置一次没有错误的用户名和密码,并成功调用我的webservice.当我尝试在现有实例上再次设置用户名和密码时(当然不需要),我得到你提到的'对象是只读'错误.每个实例生命周期设置一次值对我有用.
您似乎只能在实例化周期中很早就访问这些属性.如果我覆盖代理类(ServerClient)中的构造函数,我可以设置这些属性:
base.ClientCredentials.UserName.UserName = "Sample";
Run Code Online (Sandbox Code Playgroud)
我开始欣赏那些建议不使用VS提供的自动构建代理的人.
小智 6
这是解决方案:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23273 次 |
| 最近记录: |