在标题中传递值

时间:2014-01-03 16:39:32

标签: wcf axapta x++ dynamics-ax-2012

我们正在AX2012项目中使用外部Web服务(WCF)。我们按照以下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中调用它。请给我一个去,但想法是在AX2012中用X ++编写代码

1 个答案:

答案 0 :(得分:1)

您在X ++中唯一不同的做法是使用Aif实用程序创建代理。所以基本上,你列出的C#示例,唯一的区别是通过AIF的proxy = new MemberMasterClient()。您可以按原样使用所有其他代码进入X ++(“使用”除外)。您只需要在AOT中使用正确的程序集引用,并在代码中使用完整的命名空间。 或者,正如您所提到的,您可以在C#中对其进行全部编码,并从AX调用它: - )