Automated troubleshooting
Skype /WebTicket Validation

Issues with /WebTicket/WebTicketService.svc/mex

I recently helped a customer expand their existing Skype 2015 environment to add additional front end pools and additional servers to their existing pools. This expansion was to support business growth over the next two years as they setup the foundations for O365 and plan a move to MS Teams.

To successfully expand the existing pools without impacting current users we first migrated all users off a pool, expanded the topology, deployed Skype and other 3rd party software needed, and moved users back after the pools were healthy. During this process, we had a handful of tickets created that came up for some (but not all) users. 

Issue 1: Users were unable to log into mobile clients (external)

Issue 2: Some users were getting errors when attempting to join meeting via the Skype for Business Web App

Digging into this we quickly identified that a handful of the new servers deployed were not correctly responding to Web Ticket requests. Instead of receiving the typical XML page with a status 200 message we were seeing Page could not be displayed errors with a status 500 message. 

To temporarily resolve this issue I identified what servers were not responding correctly to /WebTicket/ calls and disabled them in the Load Balancer web conferencing VIPs. 

Once this was done we reinstalled the conferencing components and confirmed /WebTicket requests were correctly responding. 

To avoid this issue in the future I wrote a script that would query Skype for the front end pools, select all servers in each pool and test the /WebTicket URL and output the status result (200 for success, 500 for failure) 

$Pools = Get-CsPool | WHERE {$_.Services -like "Registrar:*"}|Sort-Object Identity | SELECT Identity

ForEach ($Pool in $Pools) {
    $Servers = Get-CSPool -Identity $Pool.Identity |SELECT -ExpandProperty Computers
    Write-Host $Pool.Identity -ForegroundColor Yellow -BackgroundColor Black
    ForEach ($Server in $Servers){
    $WebCall = 'https://'+ $Server + '/WebTicket/WebTicketService.svc/mex'
    #Write-Host $Webcall
    $StatusDetails = Invoke-WebRequest -Uri $WebCall |SELECT StatusCode,StatusDescription,Headers
    $StatusDetails
    }
}