2014-01-03 9 views
2

Мы используем внешний веб-сервис (WCF) в нашем проекте AX2012. Мы выполнили процедуру, описанную ниже: blog. Мы реализуем безопасность, передавая токен в заголовке. Однако я не уверен, как это сделать в AX2012.Передача значений в заголовке

пример кода для получения токена

static void myTestServiceWSDL(Args _args) 
{ 
    myServiceWSDL.Proxies.Service.ServiceClient service; 
    myServiceWSDL.Proxies.Service.LoginData LoginData; 
    str token; 
    System.Exception ex; 
    System.Type type; 

    try 
    { 
     type = CLRInterop::getType('myServiceWSDL.Proxies.Service.ServiceClient'); 

     service = AifUtil::createServiceClient(type); 
     LoginData = new myServiceWSDL.Proxies.Service.LoginData(); 
     LoginData.set_uName("test"); 
     LoginData.set_pwd("test"); 
     token=service.Login(LoginData); 
     info(token); 

    } 
    catch(Exception::CLRError) 
    { 
     ex = CLRInterop::getLastException(); 
     info(CLRInterop::getAnyTypeForObject(ex.ToString())); 
    } 

} 

Токен возвращается в порядке, который подтверждает, что код работает. Теперь вопрос в том, как сделать, чтобы установить значения заголовка для сообщения. Если это C# я бы сделал

using (MemberMasterClient proxy = new MemberMasterClient()) 
{ 
    using (OperationContextScope scope 
    = new OperationContextScope(proxy.InnerChannel)) 
     { 
      // set the message in header 
      MessageHeader header = 
MessageHeader.CreateHeader("SourceApplication", 
    "urn:spike.WCFHeaderExample:v1", 
    "WCFClient Application 2"); 
      OperationContext.Current.OutgoingMessageHeaders.Add(header); 

      Console.WriteLine("Membership Details"); 
      Console.WriteLine("Henry's - {0}", proxy.GetMembership("Henry")); 

      } 
     } 
     } 

Может ли один, дайте мне знать, как сделать эквивалент в X ++ Одна из идей, которая была на мой взгляд, чтобы написать сборку в C#, который затем может быть вызван в AX2012. Дайте это, но идея состоит в том, чтобы закодировать это в X ++ в AX2012.

ответ

1

Единственное, что вы делаете по-другому в X ++, это создание прокси-сервера с помощью утилиты Aif. Итак, в основном, ваш список C#, который вы указали, единственной разницей будет прокси = новый MemberMasterClient(), который проходит через AIF. Весь другой код, который вы можете использовать в X ++ as-is (кроме «использования»). Вам просто нужно иметь ссылку на правильные сборки в AOT и использовать полное пространство имен в коде. В качестве альтернативы, как вы упомянули, вы можете просто закодировать все это на C# и называть это от AX :-)

+0

, попытавшись реализовать код, похожий на C#, мы нанесли некоторые блоки. По-видимому, мы не можем создать класс MessageHeader. Реализация выглядит так: http://dotnetfiddle.net/z4y748 В основном он не компилируется и не выдает ошибку. Метод System.ServiceModel.Channels.MessageHeader не был объявлен. Кажется, что есть что-то очевидное, чего мы не видим, просто не в состоянии наложить на него свой палец. Вы могли бы указать. –

+0

Давайте посмотрим пример кода. –

Смежные вопросы