是否可以在不使用生成的代理的情况下设置ClientCredentials?我已经看到了一些关于使用ChannelFactory的事情,但是如果没有它也可以这样做吗?
答案 0 :(得分:4)
为了从客户端调用WCF服务,您需要一个代理(除非您想自己对SOAP请求进行硬编码,这不是太容易做到的事情,特别是如果您正在处理安全性)。可以使用其中一个工具创建代理来生成代理(添加服务引用,svcutil等),也可以使用ChannelFactory<T>
创建代理。如果您正在使用生成的代理,则使用代理的ClientCredentials属性(继承自基类ClientBase<T>
。如果您使用ChannelFactory<T>
,则在Credentials
中设置它们1}}通道工厂的属性。
答案 1 :(得分:4)
以下是示例代码:
EndpointAddress endpointAddress = new EndpointAddress("http://localhost:8888/TestSevice");
WSHttpBinding wsHttpBinding = new WSHttpBinding();
ChannelFactory<ISomeServiceInterface> iFactory = new ChannelFactory<ISomeServiceInterface>(wsHttpBinding, endpointAddress);
var clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = "sudipto";
clientCredentials.UserName.Password = "sudipto";
iFactory.Endpoint.Behaviors.RemoveAll<ClientCredentials>();
iFactory.Endpoint.Behaviors.Add(clientCredentials);
var isomeService= iFactory.CreateChannel();
isomeService.SomeFunctionToCall("parameterToTheService");