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