简介:如何访问Delphi Soap Server应用程序中的原始TWebRequest对象?

我的Web服务使用方法ITest发布服务CallMe

ITest = interface(IInvokable)
['{AA226176-FFAD-488F-8768-99E706450F31}']
  function CallMe: string; stdcall;
end;
...
initialization
InvRegistry.RegisterInterface(TypeInfo(ITest));


该接口在一个类中实现:

TTest = class(TInvokableClass, ITest)
public
  function CallMe: string; stdcall;
end;
...
initialization
InvRegistry.RegisterInvokableClass(TTest, TestFactory);


如何在此方法的实现内部访问原始的TWebRequest对象?例如。如果我想检查设置了哪些cookie,或在请求中阅读其他属性:

function TTest.CallMe: string;
begin
  // how to access TWebRequest object
  ...
end;

最佳答案

uses
  System.SysUtils,
  Web.HTTPApp,
  Soap.WebBrokerSOAP;

function TTest.CallMe: string;
var
  WebDispatcher: IWebDispatcherAccess;
begin
  Result := '';
  if Supports(GetSOAPWebModule, IWebDispatcherAccess, WebDispatcher) then
    Result := Format('You are calling me from: %s', [WebDispatcher.Request.RemoteIP]);
end;

08-04 10:17