(Попытка) перейти с WSE 3.0 в WCF для клиентского кода

Я был во всей сети для этого. . У меня только что было чертовски много времени, и поставщик, чей веб-сервис я пытаюсь использовать, отказывается официально поддерживать WCF как метод потребления.

Я не эксперт по веб-сервисам, поэтому я сделаю все возможное, чтобы задокументировать и объяснить этот начальный пост, но, во что бы то ни стало, запросите дополнительную информацию, если она вам нужна, и, надеюсь, я смогу предоставить все, что вам нужно. является необходимым.

Служба

В моей компании мы используем приложение поставщика, которое предоставляет службу. Приложение написано на Java, и похоже, что wsdl был создан с помощью Apache Axis 1.2.

Код

Мой устаревший код использует WSE 3.0. В частности, он использует прокси-классы с автоматически добавленным «WSE» в конце. Это позволяет мне использовать гораздо более простую схему аутентификации (единственный способ заставить ее работать). Мне не нужно использовать сертификаты. Я использую производную от SecurityPolicyAssertionи оборачиваю ее в объект Policy, который передается методу SetPolicyклиентского класса. Вот все, что мне нужно сделать, чтобы создать работающий экземпляр клиента:

MyWebServiceWse api = new MyWebServiceWse();
api.Url = myUrl;
api.SetPolicy(new Policy(new MyDerivedSecurityAssertion(user, pass)));

Мой готовый код по умолчанию для WCF (сгенерированный с помощью ссылки на службу) не принимает учетные данные, поэтому я знаю, что это проблема. с места в карьер. Я читал в Интернете разные вещи об использовании различных настроек безопасностиили настроек привязки в моем app.config, но ничего не работало полностью. Моя самая распространенная ошибка после тщательной обработки — WSDoAllReceiver: Запрос не содержит требуемого заголовка безопасности .

Вот файл app.config. Возможно, мы могли бы начать с рассказа о том, что здесь следует изменить, чтобы облегчить передачу учетных данных — опять же, я видел в Интернете разные мнения.



    
        
            
                
                    
                    
                        
                        
                    
                
            
        
        
            
        
    

Я изменил некоторые атрибуты, чтобы скрыть конкретную услугу, которую мы используем (политика компании и все такое).

А вот пример кода C# на данный момент (тестирование в консольном приложении):

MyClient client = new MyClient();
client.listMethod();

ОБНОВЛЕНИЕ

Прочитайте этот пост SO: wcf security . . . .

Я соответствующим образом обновил свой app.config и теперь передаю имя пользователя и пароль в коде. Я все еще получаю ту же ошибку:

WSDoAllReceiver: Request does not contain required Security header

20120517 ОБНОВЛЕНИЕ

Успешный запрос (от WSE3):

  
    
    
    urn:uuid:cb739422-c077-4eec-8cb2-686837b76878
    
      http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    
    http://removed-for-security
    
      
        2012-05-17T11:25:41Z
        2012-05-17T11:30:41Z
      
      
        change-to-protect-the-innocent
        nice-try
        KJMvUuWF2eO2uIJCuxJC4A==
        2012-05-17T11:25:41Z
      
    
  
  
    
      0
      10
    
  

Работа над получением трассировки WCF — скоро будет добавлено.

20120517 ОБНОВЛЕНИЕ 2

А вот конверт из WCF:

  
    
      
    
    
      
        1
        2147483647
      
    
  

20120518 ОБНОВЛЕНИЕ Я попытался реализовать решение в сообщении, на которое Майк Миллер ссылается в комментариях. Теперь я получаю следующую ошибку (сообщение не отправляется, потому что что-то не так в схеме):

The provided URI scheme 'http' is invalid; expected 'https'.

И если кто-то хочет спросить, да, мне нужно отправить по http, и да, я знаю, что учетные данные отправляются как незашифрованные строки :-)

10
задан Community 23 May 2017 в 11:33
поделиться