released December 7th, 2020
.NET Service Proxies now use Properties instead of Fields
The proxy generator now generates WSDL data object values as properties rather than fields. This is due to changes in
wwDotnetBridgewhich no longer can access Fields via
SetProperty()as in older versions (you can still with
GetField()/SetField()but internally there are other features that work only on properties).
This is a breaking change that requires that you rebuild your service DLLs with WSDL Wizard, but it won't require any Proxy access code changes.
Lots of wwDotnetBridge Updates
wwDotnetBridge has many improvements to improve performance and usability of access to method and property calls s well as array access.
Sample Service and Proxy Sample Code
We've set up a sample SOAP Service that demonstrates returning and passing a variety of different types from objects to arrays to DataSets. You can use this service to the Wizard and then use the sample to see detailed examples on how to receive and pass various data types to and from the service.
released June 8th, 2017
Default to .NET 4.x
Updated code generation and latest version of wwDotnetBridge to default to .NET 4.x as the majority of Windows machines these days have .NET 4.0 but not .NET 2.0.
Async Method Invokation
You can now invoke service methods asynchronously by using wwDotnetBridge's InvokeAsync function.
Clean up Generated Proxy
Generate a cleaner proxy than previously. New proxy puts all generated methods at the bottom of the generated proxy and labels each section in the generated class.
released September 30th, 2015
Add SetTimeout() method to .NET Proxy
.SetTimeout()to the .NET proxy to make it easier to set the timeout without having to explicitly use indirect calls to
Miscellaneous Fixes and Improvements in wwDotnetBridge
Fixed a number of small issues in wwDotnetBridge related to parameter parsing. Added explicit support for structs as values. Miscellaneous performance improvement in indirect method calls.
Updated documentation and Help File
Updated the documentation to a new layout and easier access for reference. New styles are easier to read and review.
released July 27th, 2015
You can now set a ComValue from the result of a static method invocation. Useful if the result type of a static method returns a result that is not accessible in FoxPro - like a struct or generic object. You can then use GetProperty/GetPropertyEx to access values of that object.
Add support for ByRef Parameters with wwDotnetBridge::InvokeMethod/InvokeStaticMethod
You can now call InvokeMethod/InvokeStaticMethod and use ComValue parameters pass and recover byref parameters. Previously ByRef parameters only worked on direct COM invokation - now you can use the indirect methods as long as you use ComValue objects for the ByRef parameters.
Fix NULL Value Issue wwDotnetBridge
Fixed bug with NULL values passed to wwDotnetBridge calls. COM Interop changes Fox NULLs to DbNulls which failed. Indirect methods now translate DbNull values to raw .NET nulls when passed. You can still pass DbNull with ComValue if needed.
Add support for wwDotnetBridge char parameters and results
.NET char parameters can now be set with ComValue::SetChar() by passing ineither a string value or number. You can also use loBridge.ConvertToDotnetValue(val,"char")to create the ComValue structure. char results are converted to string when returned from .NET method calls.
Allow for 24 parameters in wwDotnetBridge::InvokeMethod
Due to many, many support requests with Invokemethod requirements for an enormous amount of parameters, we bumped the supported parameter count to 24 parameters which is the maximum VFP allows (26 - 2 for object and method). For more parameters yet you can still use the InvokeMethod_ParameterArray() method. This is crazy but there you have it.
wwDotnetBridge ToJson(), FromJson() and ToXml(), FromXml() methods added
You can now easily turn most .NET objects into JSON and XML using these two methods as well as convert JSON and XML into objects or values. These functions are very useful for debugging to easily examine the values on a given .NET object used with wwDotnetBridge.
New wwDotnetBridge ComValue.SetValueFromCreateInstance() method
Added method to allow setting the ComValue's Value property from a CreateInstance() call. Useful for objects/values that otherwise aren't accessible in FoxPro like value types or generic types for example. ComValue structures can then be passed for indirect method/member activation.
Better Windows Version Support
Recompiled binary libraries to better support a wider range of Windows versions from XP, 2003 through Windows 8.1 Server 2012 R2, without additional runtime requirements. Previously original versions of XP required download and installation of a VC runtime library. These are now compiled in.
.NET Parameter Type Helpers in ComValue()
Added several helper functions for types that don't marshal from FoxPro to .NET and vice versa via the ComValue object (loBridge.CreateComValue()). ComValue lets you cast FoxPro values to unsupported .NET types. This update adds SetChar(), SetByte(), SetSingle(), SetFloat() to the array of existing values.
Fix Null value Bug in wwDotnetBridge
Fix a bug where NULL values passed from FoxPro were not fixed up to a .NET null, but rather used the COM default NULL value of DBNull. Null values now properly marshal as .NET null values. If you need to pass DBNull use ComValue.SetDbNull() instead.
Remove some Dependencies
Removed some additional dependencies from the installation. wwUtils, wwAPI and wconnect.h are no no longer required as dependencies for your projects. The only PRGs that need to be added to your projects now are wwDotnetBridge.prg and the generated FoxPro proxy PRG file. Note: These files are still provided as they contain useful helpers that you can use in your applications.
Many new Set methods for COM values that allow for setting FoxPro values to otherwise unsupported .NET types - like Long, Single, Guid and a few others. Useful to allow FoxPro apps to push values that are normally not supported via COM interop.
Simplified loProxy.HttpLogin method
Added loProxy.HttpLogin() method to allow for easier HTTP based authentication specification. This replaces the need to access the underlying oService.HttpLogin method.
November 27th, 2012
WSDL Proxy Generator now prompts for UAC Permissions
The Proxy generator now requests UAC Admin permissions when starting, as it needs rights to write files out to the protected folders in Program Files and optional COM Registration for the generated components to help with Intellisense in FoxPro.
Updated wwDotnetBridge Documentation
wwDotnetBridge is used to interact with the .NET Service and Message objects extensively so it's a vital part of this product. The documentation for wwDotnetBridge has been updated significantly and I've also published a wwDotnetBridge white paper that demonstrates many of the features with a host of examples that can be downloaded. wwDotnetBridge is now also open sourced on GitHub including all Win32 and .NET source code.
Added a method that converts an IEnumerable type to a plain array instance that can be accessed in FoxPro. Since many IEnumerables are loaded in forward only, one at a time mode they don't map to any .NET types. This method forces the IEnumerable collection to an array on the ComArray instance.
* Many improvements to the ComValue structure
Additional type translations have been added to the ComValue class. .NET Long Conversions to integer and SetLong from integer. Also various GUID functions are now available directly on ComValue.
August 1, 2012
Improve import from local file system WSDL Files
You can now import WSDL files from the local file system. Previously there were issues with UTF-8 byte order marks that have been fixed.
ComValue.SetValueFromInvokeMethod() Array Improvements
This method can now be called directly with a ComArray parameter to pass in arguments.
Improve Parameter Fixup in calls to InvokeMethod/InvokeStaticMethod
wwDotnetBridge now properly fixes up parameters for various .NET types like Binary data, arrays, enums etc. when using InvokeMethod or InvokeStaticMethod. Previously these fix-ups only occurred on SetProperty and return value retrieval.
Fixes and Maintenance Improvements
Small improvements in WSDL parsing logic. Better support for local data and initial service retrieval. Better accuracy in detecting the main service class if multiple service classes are provided by the WSDL.
November 19, 2011
Ability to add WSDL.exe Command Line Parameters
Added a button that allows adding of extra WSDL.exe command line parameters. This can be useful in some situations such as accessing Web Services that require additional external XSD schema files that are not automatically referenced by the WSDL.exe parser.
wwDotNetBridge - ComArray::AssignTo method to assign Array easily
This small addition makes it more logical to use ComArray instances and assign the array to .NET properties. Although this was supported before with loBridge.SetProperty() before using the built-in method that essentially does the same thing is cleaner and more consistent.
Updated Reflector and WSDL.EXE to more recent Versions
Updated Reflector to version 6.8 which doesn't prompt for forced updates. Also updated to the latest version of WSDL.EXE for the import wizard in order to take advantage of the latest service pack updates to the .NET framework 2.x.
Fixed issue with Internet Explorer Offline Mode causing wwHttp not to be able to connect
Added an explicit call to bypass Offline mode if set in Internet Explorer which could cause connections to fail if IE was running or shut down when Work Offline Mode was selected.
April. 4th, 2011
Fix bug with long Service Paths
There's a bug in the parser that parses the cServiceUrl from the generated C# source file. Long URLs are concatenated as multiple string literals. Fixed code to combine strings into single string literal. Note URLs are limited to 256 characters - longer URLs need to be manually fixed.
Added a LastException property to the .NET wwDotNetBridge object to allow capturing full exception information from the last failed operation. This allows access to custom error information otherwise not available through the error message property.
**New cErrorDetailXml Property on generated FoxPro Proxy to expose Soap Error XML **
.NET Soap clients expose Soap Exception detail which provides custom error information from the server. Soap messages have a faultstring which translates into cErrorMsg on failures, but error detail is passed back by .NET as XML which is provided here. The result is XML due to the untyped and free form nature of the error information published so parsing this data will be left up to you.
Mar. 1st, 2011
- Allow editing of Service Class Imported
Some Web Services publish more than one service instance (for different protocols) and in that case the Service class may have a different name than the service. You can now edit the name of the service class to allow mapping the .NET generated class that is imported. Note: If you do this you may have to manually change the service URL to match the service endpoint properly (from the WSDL document).
*** Added new ProxyWrapper .NET Class into Proxy Generation**
Added an intermediate class into the .NET Web Service Proxy class hierarchy to allow some highlever functions to facilitate Proxy configuration. The new proxy wrapper allows for Http Header support, easy Authentication, and ignoring of SSL errors.
ComValue.SetValueFromProperty, ComValue.SetValueFromStaticProperty and ComValue.SetValueFromInvokeMethod
Allows retrieving a .NET value from a property and storing it inside of .NET without incurring FoxPro marshalling. The ComValue structure can then be passed as a parameter to InvokeMethod or SetProperty and use the raw .NET value. Useful if marshalling causes values to lose their original type (for example, Enums passed are turned into numbers and cause problems, passing Generic or Nullable types etc.).
Added loProxy.oService.IgnoreCertificateErrors() method
The .NET service proxy now generates a new method called IgnoreCertificateErrors to optionally ignore any certificate failures. This seems to be an often requested issue for many user, but we urge extreme caution when using this feature as certificate ignoring isn't the best way to deal with security.
Moved loProxy.HttpLogin() method to loProxy.oService.HttpLogin()
Move HttpLogin functionality up from the foxpro proxy into the .NET proxy to make the FoxPro proxy generated instance a little cleaner and consolidate all HTTP related functions on the generated .NET proxy object.
Jan 4th, 2011
Improved support for unsupported .NET Parameter Types
Some .NET types don't map properly to FoxPro types and using the various InvokeMethod and SetProperty methods always require EXACT type matching in order to access properties and calling of methods. A new ComValue .NET object provides conversions to coerce FoxPro types to the proper .NET types and a new wwDotnetBridge.ConvertToDotNetValue() method provides easy conversions via code for several common unsupported types.
Fixed: Ampersands in URL broke FoxPro Class
Fixed a bug with the ServiceUrl and WsdlUrl properties that if containing Ampersands would break the class definition. Works around a VFP bug with Property strings being evaluated with Macro expressions by the VFP parser
Support for up to 15 parameters in method calls in wwDotNetBridge
Upped the parameter support to 15 from 12. Surprisingly many customers have hit parameter limits with 12 parameters. Also there's now wwDotnetBridge::InvokeMethod_ParameterArray() that allows calling a method with an array to allow unlimited number of parameters up to the .NET supported limit.
Additional Constructor Parameter Support for wwDotNetBridge
You can now specify up to 5 parameters for calls to wwDotNetBridgeCreateInstance and wwDotNetBridgeCreateInstanceOnType methods up from 3 constructor parameters.
Oct. 27th, 2010
Support for specifying .NET Version when loading Proxy
You can now pass in the .NET version number when first instantiating a service proxy. This allows you to activate assemblies that might be generated on systems running a version .NET higher than the default 2.0. Proxy's can use CreateObject("MyProxy","V4") to specify the version number.
Add support for ByRef parameters
Added support for ByRef parameters by creating a special case handling that calls the service directly by passing indirect InvokeMethod calls. This means that behavior for ByRef methods is a little different than 'normal' methods in that parameter and result values aren't fixed up for FoxPro friendliness.
Host of new wwDotNetBridge Features
Added CreateInstanceOnType method to allow access to non ComVisible types in .NET. Fixed several issues with CreateArrayOnInstance to allow dealing with arrays entirely in .NET which is required for some types. Support for passing unlimited number of parameters by using wwDotNetBridge.InvokeMethod_ParameterArray that allows passing parameters via array. Many small bug fixes and documenation updates to .NET interoperability especially with arrays and array instance creation as well as type fixups.
Much improved support for WCF Web Services
The service parser now relies on WSDL.exe to retrieve service contracts from the server and as result deals much better with WSDL documents that contain external schema links and imports.
Aug. 25, 2009
Support for file based WSDL documents
You can now specify a WSDL document from the file system. Specify the fully qualified path to retrieve the WSDL document or by selecting a local file in the Web Browser WSDL URL selection dialog.
HttpLogin method on Proxy to set Service Credentials
You can now use to the Login method to provide a username or password to pass to the server for HTTP based authentication to access the service.
AddHttpHeader and ClearHttpHeaders method on .NET Proxy
Added the ability to add HTTP Headers to the request using these two methods which manipulate any custom headers you want to add.
May 15, 2009
Support added for Authenticated WSDL documents
While authentication has been supported previously the authentication was not applied to the WSDL document itself causing some people to not be able to access the service description. Username and password entry now applies to both WSDL and Service call.
Added infrastructure to allow for internal Type overrides in wwDotNetBridge
Some types just do not work directly in Visual FoxPro and the library has now been updated to allow easier integration of pre-call parameter and post call return value translation so types can be fixed up if necessary. In this update Guids and Arrays automatically are placed in wrapper types to support features otherwise not available.
Updated Array Return Value Handling
Changed the way that array results are returned from service method calls which now return a ComArray object. This object contains an Instance and Count property as well as methods to create child items, add and remove and clear items of the array indirectly by manipulating the array inside of .NET. Any call to InvokeMethod,GetProperty that retuns an array now returns a ComArray. Any method parameter or SetProperty can optionally pass in a ComArray object instead of an array and wwDotNetBridge will pass the instance value to the underlying method/property. This replaces the mechanism of returning array results on the aResult property of the service instance. This result object can be used either directly (in VFP code) or if you need to update or modify the array by using the wwDotNetBridge array functions.
Support for Guid Parameters and Return Values
Guid types are now supported as parameters and return types. Guids are wrapped in a ComGuid object that has a GuidString property that is read and write and updates an internal Guid instance. Anywhere a Guid is required use Westwind.WebConnection.ComGuid instead.
Name Fixup for Invalid Service Class Names
Fixed a small bug in namespace naming routines that incorrectly embedded [ComVisible] attribute. Updated namespace naming routine so that invalid namespaces are automatically fixed up in the UI to avoid C# and Fox invalid names.
released Feb 9th, 2009
Added enhanced support for WCF Web Services
Microsoft Windows Communication Foundation Services are now supported. These services publish WSDL with external schema references that were previously not supported.
Fix Issues with Imported Namespace References
Fixed a few issues with imported namespace references that previously would cause the importer to fail. Essentially let Xml document resolve external namespace imports internally, while pulling schema imports manually into the document.
Improved support for DataSet Result Conversions
DataSets results are automatically converted into FoxPro XmlAdapters. We've added additional helper methods that allow quick conversion of XmlAdapters to cursors. Methods include XmlAdapterToCursors(), XmlAdapterGetCursor(), DataSetToCursors() and DataSetToXmlAdapters() to retrieve cursors easily. The latter functions are useful for dealing with DataSet properties on .NET objects in general. You can also convert Xml strings to a DataSet with XmlStringToDataSet().
Comment or report problem with topic