This article discusses Visual FoxPro Web Services, and how
to call them from an Active Server Pages (ASP) page.
NOTE: This article assumes that you are familiar with creating Web
Services with Visual FoxPro 7.0.
How you access your Visual FoxPro Web Service from ASP
depends on where each is installed. If the client ASP and the Visual FoxPro Web
Service are installed on the same Web server computer, you do not have to use
Simple Object Access Protocol (SOAP) to call the Web Service methods. Because
the Web service and ASP are installed on the same computer, you can use the
Visual Basic Script
CREATEOBJECT() function to create a new instance of the Visual FoxPro Web
Service, and then call the methods of the Web Service. The Visual FoxPro Web
Service is a multithreaded COM DLL (MTDLL) that is installed and registered on
the same computer. What makes the MTDLL a Web Service is how it is called.
Call Your Web Service From an ASP Page Using the SOAP Client
To make your ASP more portable, you can call your Web Service
.dll by using the Microsoft SOAP client. When the Web Service and client ASP
are installed on the same computer, you create the SOAP object, and then have
the SOAP object call the Web Service through HTTP. The Web Service is then
instantiated, and replies over COM and HTTP to the SOAP object. The SOAP object
displays the results.
Install the SOAP Toolkit on the computer that
hosts your Web Service. For additional information about the SOAP Toolkit,
including download instructions, visit the following Microsoft Developer
Network (MSDN) Web site:
When you install the SOAP Toolkit, the SOAP Internet Server API
(ISAPI) Listener is also installed. The ISAPI Listener is an ISAPI extension
that handles requests for SOAP content (for example, Web Services Description
Language (WSDL) files). The ISAPI Listener is faster than the ASP Listener, and
when it is installed, you do not have to generate an ASP Listener in Visual
FoxPro when you publish your Web Service.
Assume your Visual FoxPro
Web Service is named MyWebService and has a method named
GetMachineName. The class in Visual FoxPro has to be strongly typed (a new
feature in Visual FoxPro 7.0) and has to be based on the Visual FoxPro Session
class. The following three features of the Session class make it the best
choice to use in Visual FoxPro COM servers:
- The Visual FoxPro Session class provides a private data
session for your data.
- When it is compiled into an OLEPUBLIC COM object by Visual
FoxPro, only the custom properties and methods that you specify are written out
to the Type Library (.tlb) that is created. Intrinsic properties, methods, and
events are no longer written out to the Type Library.
- The following SET values have a new default setting for
private data session with Session class in Visual FoxPro:
- EXCLUSIVE=OFF
- SAFETY=OFF
- TALK=OFF
The potential drawback of using the Session class (to some
developers) is that it is a programmatic-only class. That means that there is
no visual designer for the Session class. With the new Document View Window in
Visual FoxPro, however, you can easily move through the methods of even large
program files. It is best to use the Session class for your Visual FoxPro COM
servers and Web Services.
The following is an example of the Web
Service class definition in Visual FoxPro:
NOTE: This assumes that the Web service will be installed to a Web
server that is running a Microsoft Windows operating system.
*-----------------------------------
* Web Service Definition for MTDLL "MyWebService"
* CREATED: 04/23/2002 01:02:00 PM
* ABSTRACT: Defines a simple Web Service
* for use in Microsoft Knowledge base
* article Q321512.
*-----------------------------------
DEFINE CLASS MyWebService AS SESSION OLEPUBLIC
PROCEDURE INIT
*!* If you do any work with SQL Pass-Through
*!* these settings are a good idea.
SQLSetProp(0,"DispLogin",3)
SQLSetProp(0,"DispWarnings",.F.)
ENDPROC
PROCEDURE GetMachineName AS STRING
LOCAL lcThisMachineName AS STRING
lcThisMachineName = LEFT(SYS(0),ATC("#",SYS(0))-1)
RETURN lcThisMachineName
ENDPROC
PROCEDURE Error(nError, cMethod, nLine)
COMRETURNERROR([method "] + cMethod + ["], MESSAGE())
ENDPROC
ENDDEFINE
When you have installed and registered the MTDLL on your Web
server, when you have the WSDL, and when you have installed the the correct
runtime files for the Visual FoxPro object (for Visual FoxPro 7.0 MTDLLS the
runtime is Vfp7t.dll), you can call the Visual FoxPro Web Service from an ASP
page as follows:
NOTE: This code assumes that your Web Service WSDL is on a server
named WEBSERVER, and is in a virtual directory named VFP7WS.
<%@ Language=VBScript %>
<HTML>
<HEAD>
<TITLE>VFP7 Web Service Test</TITLE>
</HEAD>
<BODY style="font-family: Verdana; font-size: 12pt; color: #000080">
<%
DIM oMSSoapClient, lcRetVal
SET oMSSoapClient = CreateObject("MSSOAP.SoapClient")
oMSSoapClient.ClientProperty("ServerHTTPRequest") = True
oMSSoapClient.mssoapinit _
"HTTP://WEBSERVER/VFP7WS/mywebservice.WSDL", _
"mywebservice", _
"mywebserviceSoapPort"
lcRetVal = oMSSoapClient.GetMachineName
SET oMSSoapClient = Nothing
Response.Write("This Web Server machine is named " & lcRetVal)
%>
</BODY>
</HTML>
You must use the
ClientProperty setting on the SOAP client object in an ASP page or the page does
not load. This setting determines whether to use the server-safe XML components
to load the WSDL and the Web Services Meta Language (WSML) files. Set the
server-safe setting to
True when an ASP application or an ISAPI DLL uses the SOAP client
object.
Note that SOAP calls are case-sensitive. Make sure that the
case is correct in the call to
MSSoapInit. To verify the case, open your WSDL file in a text editor such as
Notepad, and locate the "service name=" and "port name=" entries. These entries
correspond to the second and third parameters on the
MSSoapInit function call respectively.
Make sure that the
"soap:address location=" line in the WSDL points to the correct Web server. If
you built the Web Service on the same computer that has Internet Information
Server (IIS) installed, it is not a problem. However, if you intend to port the
Web Service to another computer, you must update this line accordingly, or the
SOAP calls will be redirected back to your development computer. The
GetMachineName() method in the Web Service code in this article returns the
computer name. Without this change, the name of your development computer is
returned, which can be confusing.
For more information,
click the following article number to view the article in the Microsoft
Knowledge Base:
307355Â
(http://kbalertz.com/Feedback.aspx?kbNumber=307355/
)
How to call a Web service in Visual FoxPro 7.0
For additional information about the WinHTTP Proxy
Configuration Utility, visit the following Microsoft Web site: