StrataFrame Forum

Using DataBaseMigrator class in a web form

http://forum.strataframe.net/Topic13497.aspx

By Keith Chisarik - 1/16/2008

How might we do this?



The third parameter is of type ISynchronizeInvoke, in the samples that I used to test it was set to ME which equated to the form, this doesn't work in a web form. I don't need it to do more then one database at a time, just apply a DDT package to create a single new database from the metadata via a web form. I am OK with using a desktop app to update multiple databases later.



Thanks.


By Trent L. Taylor - 1/16/2008

You can just create a control and use that as your Sync object.  Obviously a web page is not going to have a WinForms object to Sync off of, so just create a Control or an object that supports Invoke and pass it over.  This will at least prevent any errors from appearing.  Give that a whirl and if that doesn't work then I will try to create a quick sample and play with a workaround. Smile
By Keith Chisarik - 1/16/2008

I did try that with a couple different control types, each one errored. I will try it again in the AM and post my results.



Thanks.
By Keith Chisarik - 1/17/2008

A decent amount of looking seems to indicate that web controls do no support invoke. Hopefully I am wrong and you can suggest one, otherwise I am open for suggestions as to a workaround/fix.
By StrataFrame Team - 1/17/2008

You might be able to pass Nothing as the parameter.  If that errors out (with a NullReference exception), then just create your own class that implements ISynchronizeInvoke.  Simply return True out of the InvokeRequired property, and in the Invoke() method, simply call DynamicInvoke on the method.  We don't use the Begin- or EndInvoke:

Public Class CustomSynchronizeInvoke
    Implements System.ComponentModel.ISynchronizeInvoke

    Public Function BeginInvoke(ByVal method As System.Delegate, ByVal args() As Object) As System.IAsyncResult Implements System.ComponentModel.ISynchronizeInvoke.BeginInvoke
        Throw New NotSupportedException()
    End Function

    Public Function EndInvoke(ByVal result As System.IAsyncResult) As Object Implements System.ComponentModel.ISynchronizeInvoke.EndInvoke
        Throw New NotSupportedException()
    End Function

    Public Function Invoke(ByVal method As System.Delegate, ByVal args() As Object) As Object Implements System.ComponentModel.ISynchronizeInvoke.Invoke
        Return method.DynamicInvoke(args)
    End Function

    Public ReadOnly Property InvokeRequired() As Boolean Implements System.ComponentModel.ISynchronizeInvoke.InvokeRequired
        Get
            Return True
        End Get
    End Property

End Class

By Keith Chisarik - 1/17/2008

I tried NOTHING yesterday (good to know I'm on the same page here) and it does error. I will try this thanks Ben.
By Keith Chisarik - 1/17/2008

Ben you sir, ARE THE MAN!!!!



/bow



Thanks a lot that worked great.



Keith
By StrataFrame Team - 1/17/2008

Hehe, glad it worked for you Smile