我正在使用该ChannelFactory<T>
类型在 WCF Web 服务中创建通道WsHttpBinding
,并且该服务使用用户名/密码组合进行身份验证。虽然我使用我的自定义验证器进行身份验证,但我在创建具有不同凭据的通道时遇到了困难。
考虑到创建的开销ChannelFactory<T>
,我试图缓存它的单个实例并共享它,以便在我的应用程序的整个生命周期内创建多个通道。不幸的是,凭据似乎直接与工厂绑定,并且在创建通道后无法更改。
换句话说,如果我尝试这个:
factory.Credentials.UserName.UserName = "Bob";
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
factory.Credentials.UserName.UserName = "Alice"; // exception here
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
我收到一个异常,告诉我该UserName
属性现在是只读的。
是否可以在这里实现任何类型的缓存,或者我基本上必须ChannelFactory
为每个用户名缓存一个实例?