服务器端用java开发的webservices,客户端用delphi开发
1、部署的时候要求使用tomcat的角色来限定不知道角色名,角色密码就访问不了webservices服务。请问delphi 7里怎么实现访问有角色的webservices服务呢2、Tomcat +Axis的用户认证如何实现??

解决方案 »

  1.   

    // ************************************************************************ //
    // The types declared in this file were generated from data read from the
    // WSDL File described below:
    // WSDL     : http://localhost/ServiceTest/Service.asmx?wsdl
    // Encoding : utf-8
    // Version  : 1.0
    // (2005-12-17 1:49:46 - 1.33.2.5)
    // ************************************************************************ //unit Service;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type  // ************************************************************************ //
      // The following types, referred to in the WSDL document are not being represented
      // in this file. They are either aliases[@] of other types represented or were referred
      // to but never[!] declared in the document. The types from the latter category
      // typically map to predefined/known XML or Borland types; however, they could also 
      // indicate incorrect WSDL documents that failed to declare or import a schema type.
      // ************************************************************************ //
      // !:string          - "http://www.w3.org/2001/XMLSchema"  // ************************************************************************ //
      // Namespace : http://tempuri.org/
      // soapAction: http://tempuri.org/HelloWorld
      // transport : http://schemas.xmlsoap.org/soap/http
      // binding   : ServiceSoap
      // service   : Service
      // port      : ServiceSoap
      // URL       : http://localhost/ServiceTest/Service.asmx
      // ************************************************************************ //
      ServiceSoap = interface(IInvokable)
      ['{77573149-9C57-FA51-F11F-EFD527C91BD9}']
        function  HelloWorld(const user: WideString): WideString; stdcall;
      end;function GetServiceSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ServiceSoap;
    implementationfunction GetServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ServiceSoap;
    const
      defWSDL = 'http://localhost/ServiceTest/Service.asmx?wsdl';
      defURL  = 'http://localhost/ServiceTest/Service.asmx';
      defSvc  = 'Service';
      defPrt  = 'ServiceSoap';
    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      if HTTPRIO = nil then
        RIO := THTTPRIO.Create(nil)
      else
        RIO := HTTPRIO;
      try
        Result := (RIO as ServiceSoap);
        if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
        end else
          RIO.URL := Addr;
      finally
        if (Result = nil) and (HTTPRIO = nil) then
          RIO.Free;
      end;
    end;
    initialization
      InvRegistry.RegisterInterface(TypeInfo(ServiceSoap), 'http://tempuri.org/', 'utf-8');
      InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 'http://tempuri.org/HelloWorld');end.