2013-09-20 3 views
0

Я использую стороннюю веб-службу https в службе WCF, используя два способа, описанные ниже.Разница в аутентификации фабрики каналов WCF vs Ссылка на службу

  1. Использование Service Reference

    ServiceClient client=new ServiceClient(); 
    client.ClientCredentials.UserName.UserName ="xxx"; 
    client.ClientCredentials.UserName.Password = "pwd"; 
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain,      sslPolicyErrors) => true; 
    ServiceResponse response=client.GetData(); 
    

2.Using фабрику каналов

ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address); 
    var proxy = client.CreateChannel(); 
    client.Credentials.UserName.UserName ="xxx"; 
    client.Credentials.UserName.Password ="pwd"; 
    ServiceResponse response=client.GetData(); 

Я могу передать учетные данные безопасности, используя первый подход, и я могу получить ответ от стороннего веб-сервиса. Но я не могу получить ответ, когда я использую второй подход. Я вижу, что имя пользователя и пароль добавляются в заголовок безопасности сообщения Outoing SOAP с первым подходом, но не со вторым подходом. Я был бы рад, если кто-то может бросить какое-то предложение здесь о заводском подходе к каналу.

+0

Разница в привязок между этими двумя, возможно? –

+0

Я использую WSHttpBinding для обоих подходов. – Macnique

+0

Вы проверили параметры привязки к безопасности? –

ответ

3

Проблема заключается в том, когда вы назначаете учетные данные - в вашем текущем коде вы создаете прокси после создания фабрики, а затем вы назначаете учетные данные фабрике. Но это не имеет никакого эффекта на созданном канале:

ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address); 
var proxy = client.CreateChannel(); 

client.Credentials.UserName.UserName ="xxx"; 
client.Credentials.UserName.Password ="pwd"; 

var proxy является реализация IChannel - установка полномочия на заводе-изготовителе (client) не оказывает никакого влияния на уже созданных каналов - только те, созданных позже.

Try настройки учетных данных и затем вызова CreateChannel():

ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address); 
client.Credentials.UserName.UserName ="xxx"; 
client.Credentials.UserName.Password ="pwd"; 

var proxy = client.CreateChannel(); 
ServiceResponse response=client.GetData(); 
Смежные вопросы