【问题标题】:Accessing WCF with Delphi Client and Windows Authentication使用 Delphi 客户端和 Windows 身份验证访问 WCF
【发布时间】:2015-02-13 11:15:33
【问题描述】:

我有一个WCF-Service 我想通过Delphi-Client 访问。现在我的问题是,我必须使用 Windows Authentication 并且不知道在哪里告诉 Delphi-Client 自动使用这些凭据。
只有当我在与 WCF 相同的机器上启动客户端时它才有效(当然)。否则,我会收到带有错误 401(未经授权)的 ESOAPHTTPException

C#-Client 中,它只是一些类似的配置

<transport clientCredentialType="Windows" />

但是如何配置 Delphi 客户端以使用 Windows 凭据?

编辑:
我在 Delphi 中为测试它是否正常工作所做的只是导入 wsdl 并执行以下操作:

procedure TForm1.Button1Click(Sender: TObject);
var
  trans: IService;
begin
  trans := Service_Transfer.GetIService();
  Label1.Caption := trans.GetPath;
end;

【问题讨论】:

  • 您没有显示代码,因此很难提供帮助。如何连接到 WCF 服务?你是如何创建代理的?你为它配置了什么?代理不可能指定凭据。无论如何,所有桌面应用程序都使用当前用户的凭据。如果应用程序在本地而不是远程工作,您可能使用本地帐户而不是域帐户登录。
  • 你用的是什么delphi版本?
  • 您可以通过 THTTPRIO.Webnode 传递凭据,格式为:域\用户
  • 好问题,我从来没有找到解决方案如何做到这一点,我遇到了同样的问题,我最终制作了一个执行 WCF 调用的 .NET COM DLL...
  • SOAP 代表标准 OAP...但是没有什么比 WCF 实现的 SOAP 更标准的了。它在 WCF 客户端上运行良好,但即使在 Java 上,除了最简单的模式外,我们在使用 WCF SOAP 服务器时也遇到了问题。一旦包含凭据,这就是一场噩梦……即使是.Net 客户端顺便说一句……最后,我们通常编写一些托管 COM 组件的 C# dll,我们从 Delphi 调用这些组件。就像@whosrdaddy...只是一个 PITA。

标签: wcf delphi soap windows-authentication


【解决方案1】:

如果客户端和服务器在不同的计算机上,客户端必须使用有效的域帐户。

查看我对How can I use NTLM authentication in a Delphi SOAP Web Service client?的回答:

在 THTTPRio 的 WebNode 子组件的用户名属性中 组件,使用域名后跟反斜杠和用户 名字。

请注意,使用普通 Web 浏览器(Chrome、Firefox、...)从另一台计算机(在同一网络中)访问 Web 服务 WSDL 地址应该会显示一个登录表单,其中的凭据格式为 domain\user可以输入密码。

【讨论】:

  • 但是如何使用登录用户的凭据呢?其他方式已经在 cmets 中讨论过了。
猜你喜欢
  • 2018-02-12
  • 2015-06-13
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2013-10-07
  • 2023-03-20
  • 2016-08-29
相关资源
最近更新 更多