不使用代理设置ClientCredentials?

时间:2011-06-06 19:09:20

标签: wcf

是否可以在不使用生成的代理的情况下设置ClientCredentials?我已经看到了一些关于使用ChannelFactory的事情,但是如果没有它也可以这样做吗?

2 个答案:

答案 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");