Posts

Showing posts from 2018

Amazon Alexa skill account linking using IdentityServer4

Image
It took a lot of reading and quite some time to wade though exactly what was required to get Amazon Alexa account linking working with our Identity Server 4 oauth server. Most of the stuff out there was to perform account linking with Amazon's own OAUTH server, and not IdentityServer4. Well, I finally got to the bottom of it all, and to save you devs valuable time and frustrations, I've laid it all out below: Create your Asp.Net Core API Configure Identity Server 4 for account linking Create your Alexa Skill Account link your Alexa skill to Identity Server 4. Amazon will take care to call your Identity Server 4 to obtain a token and manage refresh tokens for you. Call your API from Alexa. Alexa voice command → Amazon Lambda function → [Hidden Identity Server 4 call] → Asp.Net Core API → Return Speech back to Alexa to say aloud. Asp.Net Core API The controller for your Alexa API should look something like this: The IDataService is used solely for accessing the data...

Azure Sql Server Profiling

As you may have already guessed, you cannot use SQL Server Profiler on an Azure database. However, you can use the following code to find out what SQL was executed: In order to get the real parameter values, you need to enable sensitive data logging by using DbContextOptionsBuilder.EnableSensitiveDataLogging method: Enables application data to be included in exception messages, logging, etc. This can include the values assigned to properties of your entity instances, parameter values for commands being sent to the database, and other such data. You should only enable this flag if you have the appropriate security measures in place based on the sensitivity of this data.

SQL Server Paging - The Holy Grail

More info on the above see SqlServerCentral Another version:

Interpreting the query plan and speeding it up

Image
Bookmark Lookup - An index was used but as the index does not 'cover' the query the query processor must use the ROWID from the index to 'lookup' the actual data row. Unless the index can be alter to ‘cover’ the columns of the query this cannot be optimised further. Clustered Index Scan - Similar to a table scan (its just that the table has a clustered index) and similarly undesirable, particularly for large tables. If you see these then the columns in the query are either not indexed or the distribution statistics have led the query optimiser to decide the scan is more/ as efficient. Restructuring the query can sometimes eliminate these operations; or add an index. Clustered Index Seek - The clustered index is used to find matching rows. This is optimal behaviour. Compute Scalar - As it says – a scalar is being computed. Unless this is not really needed it can't be optimised. It its not needed, remove it! Constant Scan - The query requires a constan...

MSMQ Best Practices

Performance recommendations Avoid unnecessary database lookups before deciding if a message can be dropped. Prioritization should be given in code for dropping the message as quickly and efficiently as possible. If database lookups are required in deciding if a message can be dropped, can these be cached (with a refresh timeout)? If you are dropping messages, is there a better way to only receive the correct messages? If you are subscribed to an event processor publisher, does that publisher provide any kind of subscription filtering? Filtering can be achieved via database event subscription tables, (a list of subscribers with their input queues, and a list of events each input queue is interested in). Separate event types Publishers should translate event types into separate System.Types, with hierarchies to support grouping. For example, with some kind of  delivery event data, these could be group interfaces such as ProofOfDeliveryGroup, ProofOfCollectionGroup, e...