Как отправить ClientCredentials WCF с использованием Delphi XE - PullRequest
8 голосов
/ 23 мая 2011

Я разработал Службу WCF с пользовательским UserNamePasswordValidator с basicHttpBinding с использованием HTTPS. Он отлично работает с клиентом .Net, используя ClientCredentials для отправки имени пользователя и пароля для аутентификации.

Однако мне нужно вызвать это из клиента Delphi XE. Как отправить эквивалент .Net ClientCredentials с помощью Delphi? Это возможно? Если это так, как? Если это не так, есть ли альтернативы?

Tks

EDIT

Ниже мой клиентский код в .Net:

EndpointAddress oTransac = new EndpointAddress(GetAddress());
using (WebServiceClient oClient = new WebServiceClient ("httpbasic", oTransac))
{
  oClient.ClientCredentials.UserName.UserName = "username";
  oClient.ClientCredentials.UserName.Password = "password";
  oClient.DoStuff();
}

EDIT

Я проводил некоторые исследования и смог выполнить аутентификацию между Delphi и старыми веб-сервисами asmx с использованием SOAP Hearders. Я нашел статью ниже. Смогу ли я добиться того же поведения старого [WebMethod] [System.Web.Services.Protocols.SoapHeader("SoapHeader")], используя технику статьи?

http://weblogs.asp.net/paolopia/archive/2008/02/25/handling-custom-soap-headers-via-wcf-behaviors.aspx

РЕДАКТИРОВАТЬ BOUNTY

Получив пометку как правильный ответ за вознаграждение, я хотел бы иметь возможность вызывать веб-службу из Delphi, используя службу WCF UserNamePasswordValidator на стороне сервера.

Ответы [ 2 ]

5 голосов
/ 23 мая 2011

Во-первых, basicHttpBinding выполняется через HTTP (не HTTPS)

http://msdn.microsoft.com/en-us/library/ms731361.aspx

Использование службы WFC из Delphi обычно производится путем создания WSDL из службы

Как создать один файл WSDL из существующей службы WCF?

http://social.msdn.microsoft.com/Forums/en/wcf/thread/fc2c5074-1116-4f92-a972-01bb3a142535

WCF: как создать один документ WSDL без WSDL:import?

и создание прокси-класса Delphi путем импорта этого WSDL в ваш проект Delphi.

>wsdlimport.exe service.wsdl

, а затем используйте сгенерированный модуль Delphi в вашем проекте Delphi

http://www.drbob42.com/examines/examinB9.htm

http://edn.embarcadero.com/article/36962

Параметры, которые вы отправляете в сервисвызовы (имя пользователя, пароль, ClientCredientials и т. д.) будут определены в сгенерированном модуле Delphi - не должно быть проблем, если вы можете подключиться к услуге.

1 голос
/ 20 июня 2011

Несколько недель назад мне также пришлось подключиться к службе WCF. Я закончил писать клиента в .net и использовать UnmanagedExports https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

После этого dll можно использовать в Delphi как нативную dll

...