You are here:   Forum
Register   |  Login

 

Forum Notice

This Forum is ARCHIVE only
For LightSwitch questions,
please use the official forums at:

http://social.msdn.microsoft.com/forums/en-US/lightswitch/threads


Forums

Running external Application in an IFrame causes DotNetNuke to stop allowing users to log in
Last Post 13 Jul 2011 08:17 AM by admin. 7 Replies.
AddThis - Bookmarking and Sharing Button Printer Friendly
  •  
  •  
  •  
  •  
  •  
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages
Michael WashingtonUser is Offline
Send Private Message
Posts:1159
Avatar

--
30 May 2011 04:40 PM
    If you follow the example described here:

    http://lightswitchhelpwebsite.com/B...yment.aspx


    Everything will work just fone for about 5 minutes. then you will find that users cannot log into the DotNetNuke website anymore.

    The reason is that when they log in, the DotNetNuke core stored procedure, UpdateUser, gets stuck in a loop until it times out.

    When I reproduce this on my test machine, I can go into SQL Enterprise Manager and the following query will run until you stop it:

    exec dbo.UpdateUser @UserID=2,@PortalID=0,@FirstName=N'Administrator',@LastName=N'Account',@Email=N'Webmaster@ADefwebserver.com',@DisplayName=N'Administrator Account',@UpdatePassword=0,@Authorised=1,@RefreshRoles=0,@LastIPAddress=N'::1',@IsDeleted=0,@LastModifiedByUserID=-1

    The question of course is why? I can only suspsct it is that perhaps something odd is happening because the MachineKey was copied into the remote site and some bad parameters are now being passed to the stored procedure?

    I am trying to investigate this, but any ideas are appreciated!
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    30 May 2011 04:55 PM
    First update. It's not the paramteters passed to the stored procedure. I have another DotNetNuke website where I am the Admin Account and User 2. When I log in, the "UpdateUser" stored procedure in that site is run with the exact same parameters and it runs fine.



    Now I am looking "inside" the stored procedure...



    ALTER PROCEDURE [dbo].[UpdateUser]

    @UserID int,

    @PortalID int,

    @FirstName nvarchar(50),

    @LastName nvarchar(50),

    @Email nvarchar(256),

    @DisplayName nvarchar(100),

    @UpdatePassword bit,

    @Authorised bit,

    @RefreshRoles bit,

    @LastIPAddress nvarchar(50),

    @IsDeleted bit,

    @LastModifiedByUserID int

    AS

    UPDATE dbo.Users

    SET

    FirstName = @FirstName,

    LastName = @LastName,

    Email = @Email,

    DisplayName = @DisplayName,

    UpdatePassword = @UpdatePassword,

    LastIPAddress = @LastIPAddress,

    LastModifiedByUserID = @LastModifiedByUserID,

    LastModifiedOnDate = getdate()

    WHERE UserId = @UserID



    IF @PortalID IS NULL

    BEGIN

    UPDATE dbo.Users

    SET

    IsDeleted = @IsDeleted

    WHERE UserId = @UserID

    END

    ELSE

    BEGIN

    UPDATE dbo.UserPortals

    SET

    Authorised = @Authorised,

    RefreshRoles = @RefreshRoles,

    IsDeleted = @IsDeleted

    WHERE UserId = @UserID

    AND PortalId = @PortalID

    END
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    30 May 2011 05:13 PM
    This query (this is the first part of the "UpdateUser" stored procedure) simply will not complete when I try to run it in SQL Enterprise manager:

    DECLARE @RC int
    DECLARE @UserID int
    DECLARE @PortalID int
    DECLARE @FirstName nvarchar(50)
    DECLARE @LastName nvarchar(50)
    DECLARE @Email nvarchar(256)
    DECLARE @DisplayName nvarchar(100)
    DECLARE @UpdatePassword bit
    DECLARE @Authorised bit
    DECLARE @RefreshRoles bit
    DECLARE @LastIPAddress nvarchar(50)
    DECLARE @IsDeleted bit
    DECLARE @LastModifiedByUserID int

    -- TODO: Set parameter values here.
    Set @UserID=2
    Set @PortalID=0
    Set @FirstName=N'Administrator'
    Set @LastName=N'Account'
    Set @Email=N'Webmaster@ADefwebserver.com'
    Set @DisplayName=N'Administrator Account'
    Set @UpdatePassword=0
    Set @Authorised=1
    Set @RefreshRoles=0
    Set @LastIPAddress=N'::1'
    Set @IsDeleted=0
    Set @LastModifiedByUserID=-1

    UPDATE dbo.Users
    SET
    FirstName = @FirstName,
    LastName = @LastName,
    Email = @Email,
    DisplayName = @DisplayName,
    UpdatePassword = @UpdatePassword,
    LastIPAddress = @LastIPAddress,
    LastModifiedByUserID = @LastModifiedByUserID,
    LastModifiedOnDate = getdate()
    WHERE UserId = @UserID


    What could cause this? I have to stop and re-start SQL Server to get everything back to normal
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    30 May 2011 05:24 PM
    Ok the Users table is simply locked when this happens. It is nothing special about the "UpdateUser" stored procedure. Also it is only the "Admin" record in the User table. I can edit any other row but that one.

    So the question is now, what is locking that row in the users table?
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    30 May 2011 07:55 PM
    Ok it appears I have tracked this down.

    I needed to determine if the current user is an Administrator or not in my external LightSwitch application. the problem is LightSwitch places locks on tables when you connect to external data sources.

    So when I connected to the DotNetNuke Users table, LightSwitch locks the rows it is using. Locking the DotNetNuke Users table is a no no. The thing that sucks is I also get this even if I am using a View (like vw_UserRoles)

    I can use others methods such as a web service to get the information I need.

    The good news is that this is only related to connecting to DotNetNuke as an external datasource NOT related to running LightSwitch in an IFrame with DotNetNuke.
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    04 Jun 2011 08:28 AM
    A final note on this. The answer is to use a WCF RIA Dataservice. This is what I am using in the Things For Sale example at: http://lightswitchhelpwebsite.com/D...rSale.aspx
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    SpartanUser is Offline
    New Member
    New Member
    Send Private Message
    Posts:14
    Avatar

    --
    13 Jul 2011 08:08 AM
    One question I had is...how do you get your site to run so fast with DNN?  Is there any special configuration/hosting that you use?
    Michael WashingtonUser is Offline
    Send Private Message
    Posts:1159
    Avatar

    --
    13 Jul 2011 08:17 AM
    -----------
    Michael Washington
    http://LightSwitchHelpWebsite.com
    You are not authorized to post a reply.


    Latest Microsoft Visual Studio LightSwitch Forum Threads That Have Answers

    I created a browse screen to be used as a modal window for another screen.  In the modal screen there is a button to return to the orignal screen.  The button uses the showScreen method.  This seems to work if the modal screen is in full screen mode.  However, if "show as dialog" is selected for the modal screen, when you try to navigate back to the original screen, the modal doesn't close and the original screen is then displayed inside the modal while being greyed out on the outside of the modal (not good).  How do you close the dialog and return to the original screen?  There are no records being added or changed in the modal so it doesn't need to commitChanges; just navigate back to the previous screen and provide that screen's parameters.  I looked at the navigateBack() method but couldn't figure out how to add the screen's parameters with that.  TIA
    Read more...

    querying on the client
    1/23/2015 11:27 AM
    I need to do some querying client side. As a simplified example, this works great: var filter = "(substringof('Futterkiste', CustomerName) eq true)"; msls.application.activeDataWorkspace.ApplicationData.Customers .filter(filter) .top(1) .execute() .then(function (results) { if (results.results.length >= 0) { screen.prpCustomer = results.results[0]; } }, function (error) { alert(error); } ); However, if I already have the customer data loaded (or at least available as a local screen query), how can I filter and use that collection?  This produces Error: Object doesn't support property or method 'filter'. var filter = "(substringof('Futterkiste', CustomerName) eq true)"; screen.getCustomers() .filter(filter) // filter not supported .top(1) .execute() // is this necessary with
    Read more...

    "Common Screen Set" is missing
    1/23/2015 7:14 AM
    I've installed VS2013 - Update 4 and the Office Tools November Update. I'm starting a new project and I want to use the "Common Screen Set", but that Screen Type does not show up in my list of screen templates. This is a completely new installation with no projects (yet). Did I miss a step somewhere? Thanks!
    Read more...

    I have created a Search Screen using the Add Query method to the Child Entity, then creating a Browse Screen based on that Query. This has successfully allowed me to use the Query Designer to set up my search of all the fields in the Parent and Child entity. The problem I am having is that if the Parent has no Children, then that Parent record isn't searchable at all. Maybe I'm going about this the wrong way.  I have also tried extending the query with LINQ but I can't seem to perform a Join on the Navigation Property (Parent_Child), nor can I seem to make use of the Navigation Property via Intellisense at all. Any help would be greatly appreciated.
    Read more...

    I need to implement an advanced search functionality in a browse screen for a large table.  The table has 80+ columns and therefore will have a large number of possible query parameters.  The screen will be built on a modeled query with all of the parameters marked as optional.  Given the large number of parameters, I am thinking that it would be better to use a separate screen to receive the parameter input from the user, rather than a Popup.  Is it possible for example to have a search button on the browse screen (screen a) open a new screen (screen b) that contains all of the search parameters, have the user enter the parameters they want, then click a button to send all of the parameters back to screen a where the query is executed and the search results are returned to the table control?  This would effectively make screen b an advanced modal window for screen a.  In addition, if the user were to execute the query, then want to change a
    Read more...

    1234
    Microsoft Visual Studio is a registered trademark of Microsoft Corporation / LightSwitch is a registered trademark of Microsoft Corporation