我想使用Delphi XE6创建一个Exchange Web Services (EWS)客户端应用程序。
我正在使用带有wsdl的THttpRio组件。如何设置用户凭据?在其他语言中,THttpRio组件的等效项具有Credentials属性(example)。 但这在Delphi组件中缺失。
身份验证机制(除模仿外)不是ews wsdl的一部分。它是SOAP层的原生。
清单1:
procedure TForm1.Button1Click( Sender: TObject);
var
lESB : ExchangeServicePortType;
request : GetServiceConfiguration;
Impersonation : ExchangeImpersonation;
RequestVersion: RequestServerVersion;
MailboxCulture1: MailboxCulture;
GetServiceConfigurationResult: GetServiceConfigurationResponse;
ServerVersion : ServerVersionInfo;
begin
lESB := HTTPRIO1 as ExchangeServicePortType;
request := GetServiceConfiguration.Create;
request.RequestedConfiguration := ArrayOfServiceConfigurationType.Create( 'UnifiedMessagingConfiguration');
Impersonation := ExchangeImpersonation.Create;
RequestVersion := RequestServerVersion.Create;
MailboxCulture1 := MailboxCulture.Create;
GetServiceConfigurationResult:= GetServiceConfigurationResponse.Create;
ServerVersion := ServerVersionInfo.Create;
try
lESB.GetServiceConfiguration(
request, Impersonation, RequestVersion, MailboxCulture1,
GetServiceConfigurationResult, ServerVersion)
finally
request.Free;
Impersonation.Free;
RequestVersion.Free;
MailboxCulture1.Free;
GetServiceConfigurationResult.Free;
ServerVersion.Free
end
end;
上面的清单1显示了我到目前为止尝试过的一些示例代码。该功能的目的是获取有关服务器的版本信息。 HTTPRIO1是具有默认属性的THTTPRIO组件,并且连接到EWS的标准wsdl。这不起作用,因为未设置用户凭据。
如何设置用户凭据?
答案 0 :(得分:0)
经过大量的反复试验,这就是我提出的解决方案......
如果使用THTTPRio组件,从通过代理服务器建立Internet连接的角度来看,THHPRio的HTTPWebNode属性的UserName / Password属性可用于标识用户的凭据。
如果使用THTTPReqResp组件,则组件直接拥有相同的UserName / Password属性。
如果使用TIdHTTP,则需要使用与代理相关的属性。
如果要使用当前登录的凭据,并明确将密码传递到组件上,可以通过留空,THTTPRio和THTTPReqResp组件的UserName和Password属性来实现此目的。代理信息将自动从系统注册表中获取。然而,TIdHTTP是不同的。此组件需要明确设置代理配置,包括Internet用户的凭据。
我无法使用标准肥皂溶液THTTPRio组件。问题是THTTPRio组件没有产生正确的请求信封形状。没有详细说明,存在许多问题,例如应该放在正文中的元素,将出现在标题中,以及模式违规。如果你可以得到这个(基于已发布的wsdl的THTTPRio),(但我怀疑它),值得注意的是wsdl需要被调整以包含服务节点。出于安全原因,Microsoft故意排除服务节点,但正确运行Delphi soap向导需要它。
如果您的应用程序位于防火墙后面并且必须与代理服务器协商,那么基于TIdHTTP开发解决方案是不可能的。
最简单和最好的解决方案是使用THTTPReqResp组件。你甚至不需要这个智慧。您必须制作自己的xml请求信封,但使用Microsoft的优秀文档,显示简单的信封,这项任务很轻松。
http://schemas.microsoft.com/exchange/services/2006/messages
肥皂封套是遵循特定发布格式的XML文档,其中嵌入了请求数据。如何制作这些信封?
这里有两种可能适合我的方式:
您可以使用以下两种方法,但我建议反对。并不是说它们不起作用,而只是技术太笨拙而且编码过多: