Cumulative updates for Lync server 2013 – July 2013

Cumulative updates for Lync server 2013  – July 2013

http://support.microsoft.com/kb/2809243

Updates that are released for Lync Server 2013

  • Update for Core Components
    2835432 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Core Components: July 2013
  • Update for Conferencing server
    2835434 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Conferencing Server: July 2013
  • Update for Web Components server
    2835435 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Web Components: July 2013
  • Update for Standard or Enterprise edition server
    2819565 Description of the cumulative update 5.0.8308.420 for Lync Server 2013: July 2013
  • Update for Web Conferencing server
    2835507 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Web Conferencing Server: July 2013
  • Update for Mediation server
    2796554 Description of the cumulative update 5.0.8308.291 for Lync Server 2013, Mediation Server: February 2013
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit
    2835437 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Unified Communications Managed API 4.0 Runtime: July 2013
  • Update for Call Park Service
    2835440 Description of the cumulative update 5.0.8308.420 for the Lync Server 2013, Call Park service: July 2013
  • Update for Persistent Chat server
    2835433 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Persistent Chat: July 2013
  • Update for Unified Communications Managed API 3.0 Workflow APIs
    2835438 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, UCMA 3.0 Workflow APIs: July 2013
  • Update for Administrative Tools
    2837510 Description of the cumulative update 5.0.8308.420 for Lync Server 2013, Administrative Tools: July 2013

 

To install updates for Lync Server 2013 that has the February, 2013 cumulative update installed, you must perform the following steps 1 and 2.

To install updates for Lync Server 2013 RTM, you must perform the following steps 1-5.

Step 1: Install the cumulative updates

Important To maintain a functional Lync Server 2013 Enterprise Edition pool, you must make sure that Ready is returned for theState value of the pool when you run the Get-CsPoolUpgradeReadiness cmdlet and that you have the appropriate number of Lync Server 2013 front end servers that are running. Please see the “Upgrade or Update Front End Servers” and “Planning for the Management of Front End Pools” section of the following TechNet topic to determine the State valueof the pool before you apply the cumulative update.

The Cumulative Server Update Installer applies all updates for the appropriate server role in one operation. To use the Cumulative Server Update Installer, follow these steps.

Note If User Account Control (UAC) is turned on, you must start the Cumulative Server Update Installer by using elevated permissions to make sure that all updates are installed correctly.

To download the Cumulative Server Update Installer, go to the following Microsoft Download Center website:

Download

Download the update package now.

Lync Server 2013 Enterprise Pools

The front end servers in an Enterprise Edition pool are organized into upgrade domains. These upgrade domains are subsets of front end servers in the pool. Upgrade domains are created automatically by Topology Builder.

You must upgrade one upgrade domain at a time, and you must upgrade each front-end server in each upgrade domain. To do this, take one server in an upgrade domain offline, upgrade the server, and then restart it. Then, repeat this process for each server in the upgrade domain. Make sure that you record which upgrade domain and servers that you have upgraded.

Upgrade or Update Front End Servers

To upgrade front end servers, you must follow these steps:

  1. On a front end server in a pool, run the following cmdlet:

    Get-CsPoolUpgradeReadinessState

    If the State value of the pool is Busy, wait for 10 minutes, and then try to run the Get-CsPoolUpgradeReadinessStatecmdlet again. If you see Busy for at least three consecutive times after you wait 10 minutes in between each attempt, or if you see any result of InsufficientActiveFrontEnds for the State value of the pool, there is an issue with the pool. If you cannot resolve this issue, you may have to contact Microsoft Support. If this pool is paired with another front end pool in a disaster recovery topology, you must fail the pool over to the backup pool, and then update these servers in this pool. For more information about how to fail over a pool, go to the following Microsoft website:

    If the State value of the pool is Ready, go to step 2.

  2. The Get-CsPoolUpgradeReadinessState cmdlet also returns information about the upgrade domains in the pool, and about which front end servers are in each upgrade domain. If the ReadyforUpgrade value for the upgrade domain that contains the Server that you want to upgrade is True, you can upgrade the server. To do this, you must follow these steps:
    1. Stop new connections to the front end server(s) by using the Stop-CsWindowsServices -Graceful cmdlet.
    2. Run the Cumulative Server Update Installer by using the UI or by using a command to upgrade the front end server(s) associated with an upgrade domain.

      NOTE: If you upgrade or update front end servers during scheduled server downtime, you can run the cmdlet in step 2 without the -Graceful parameter. More specifically, run the cmdlet as Stop-CsWindowsService. This action immediately shuts down services, and the server does not wait until each existing service request is fulfilled.

      Note The UI provides a clear indication of which updates are installed when you click Install Updates.

      To run the Installer, run the following command:

      LyncServerUpdateInstaller.exe

      Notes The following text describes parameters that you can use together with theLyncServerUpdateInstaller.exe command:

      • The /silentmode switch applies all applicable updates in the background.
      • The /silentmode /forcereboot switch applies all applicable updates in the background, and then automatically restarts the server at the end of the installation process if this is necessary.
      • The /extractall switch extracts the updates from the installer and saves the updates in a subfolder that is named “Extracted” in the folder in which you ran the command.
    3. Restart the server(s) and make sure that it is accepting new connections.

Lync Server 2013 Standard Edition and other Roles

To run the Cumulative Server Update Installer, use the UI or running a command line.

Note The UI provides a clear indication of which updates are installed when you click Install Updates.

To run the Installer, run the following command:

LyncServerUpdateInstaller.exe

Notes The following text describes parameters that you can use together with the LyncServerUpdateInstaller.exe command:

  • The /silentmode switch applies all applicable updates in the background.
  • The /silentmode /forcereboot switch applies all applicable updates in the background, and then automatically restarts the server at the end of the installation process if this is necessary.
  • The /extractall switch extracts the updates from the installer and saves the updates in a subfolder that is named “Extracted” in the folder in which you ran the command.

Step 2: Apply the back end database updates

After you install the update for the Core Components server role on a Lync Server 2013 Enterprise Edition front end server or on a Lync Server 2013 Standard Edition server, the updated SQL database files are dropped to the computer that has the Core Components server role installed. To apply the database changes, you have to run the applicable cmdlets run the applicable cmdlets that are described in step 2.

Note The Update parameter is not required when you run the Install-CsDatabase cmdlet to update the Lync Server 2013 databases.

Lync Server 2013 Standard Edition

Install-CsDatabase -ConfiguredDatabases -SqlServerFqdn SE.FQDN -Verbose

Note You must run the cmdlet on the Lync Server 2013 Standard Edition server.

Lync Server 2013 Enterprise Edition

You must perform several configuration operations, depending on the kind of Lync Server 2013 Enterprise Edition back end servers that you are using.

Note If Persistent Chat is collocated (Persistent Chat front end service and back end database are running on the same server), you must run the following command together with the ExcludeCollocatedStoresparameter.

Note If database mirroring is enabled for your back end databases, we strongly recommended that you use the Invoke-CsDatabaseFailover -NewPrincipal Primary cmdlet and verify that the primary server is principal for all databases before you run the Install-CsDatabase cmdlet.

Install-CsDatabase -ConfiguredDatabases -SqlServerFqdn FEBE.FQDN -Verbose

 

Lync Server 2013 Persistent Chat Databases

When Persistent Chat Services are collocated with the SQL BE Databases, run the following command:

Install-CsDatabase -DatabaseType PersistentChat -SqlServerFqdn PChatBE.fqdn -SqlInstanceName DBInstance -Verbose

 

Lync Server 2013 Monitoring/Archiving/Persistent Chat Databases

When Lync Server 2013 Monitoring/Archiving/Persistent Chat databases are deployed on stand-alone SQL databases, run the following command:

Install-CsDatabase -ConfiguredDatabases -SqlServerFqdn SQLServer.FQDN -Verbose

 

Step 3: Apply the Central Management Database update

Note You do not have to update the Central Management Database in the following instances:

  • If the Central Management Store is homed on a Lync Server 2010 Standard Edition Server or Enterprise pool, do not run the Install-CsDatabase -CentralManagementDatabase cmdlets.
  • If the Central Management Store is homed on a Lync Server 2013 Standard Edition Server or Enterprise pool that was previously updated with the Lync Server 2013 February 2013 cumulative updates.

After the Lync Server 2013 Enterprise Edition front end server or the Lync Server 2013 Standard Edition Server backends are updated, run the following cmdlet to update the Central Management Store:

Install-CsDatabase -CentralManagementDatabase -SqlServerFqdn CMS.FQDN -SqlInstanceName DBInstanceName -Verbose

Note In a coexistence environment that contains both Lync Server 2010 and Lync Server 2013 in which the Central Management Service is located on a Lync Server 2010 pool, do not run the Install-CsDatabase -CentralManagementDatabase cmdlet. If you later move the Central Management Service to a Lync Server 2013 pool, you have to run the Install-CsDatabase -CentralManagementDatabase cmdlet to apply the changes.

Step 4: Enable the Mobility service

To enable the Mobility service, run the following cmdlet:

Enable-CsTopology

Step 5: Enable the Unified Communications Web API

To enable the Unified Communications Web API (UCWA), you must run the Bootstrapper.exe tool again on all Lync Server 2013 Director servers, Standard Edition servers, and Enterprise Edition front end servers on which the web components are installed and updated. The command to run the tool is as follows:

%ProgramFiles%\Microsoft Lync Server 2013\Deployment\Bootstrapper.exe

 

List of server roles and the updates that apply to them

Lync Server 2013 – Standard Edition server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437
  • Update for Standard/Enterprise Edition Server: KB 2819565
  • Update for Conferencing Server: KB 2835434
  • Update for Web Components Server: KB 2835435
  • Update for Web Conferencing Server: KB 2835507
  • Update for Mediation Server: KB 2796554
  • Update for Call Park Service: KB 2835440

Lync Server 2013 – Enterprise Edition – front end server and back end server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437
  • Update for Standard/Enterprise Edition Server: KB 2819565
  • Update for Conferencing Server: KB 2835434
  • Update for Web Components Server: KB 2835435
  • Update for Web Conferencing Server: KB 2835507
  • Update for Mediation Server: KB 2796554
  • Update for Call Park Service: KB 2835440

Lync Server 2013 – Edge server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437
  • Update for Standard/Enterprise Edition Server: KB 2819565

Lync Server 2013 – stand-alone Mediation server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437
  • Update for Mediation Server: KB 2796554

Lync Server 2013 – Director server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437
  • Update for Standard/Enterprise Edition Server: KB 2819565
  • Update for Web Components Server: KB 2835435

Lync Server 2013 – Persistent Chat front end server

  • Update for Core Components: KB 2835432
  • Update for Unified Communications Managed API 4.0, Core Runtime 64-bit: KB 2835437

Lync Server 2013 – Administration Tools

  • Update for Core Components: KB 2835432

Leave a comment

Filed under Uncategorized

SIP responses for reference

Can you list all known SIP responses?

1xx = informational responses

  • 100 Trying
  • 180 Ringing
  • 181 Call Is Being Forwarded
  • 182 Queued
  • 183 Session Progress

2xx = success responses

  • 200 OK
  • 202 accepted: Used for referrals

3xx = redirection responses

  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Moved Temporarily
  • 305 Use Proxy
  • 380 Alternative Service

4xx = request failures

  • 400 Bad Request
  • 401 Unauthorized: Used only by registrars. Proxys should use proxy authorization 407
  • 402 Payment Required (Reserved for future use)
  • 403 Forbidden
  • 404 Not Found: User not found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 408 Request Timeout: Couldn’t find the user in time
  • 410 Gone: The user existed once, but is not available here any more.
  • 413 Request Entity Too Large
  • 414 Request-URI Too Long
  • 415 Unsupported Media Type
  • 416 Unsupported URI Scheme
  • 420 Bad Extension: Bad SIP Protocol Extension used, not understood by the server
  • 421 Extension Required
  • 423 Interval Too Brief
  • 480 Temporarily Unavailable
  • 481 Call/Transaction Does Not Exist
  • 482 Loop Detected
  • 483 Too Many Hops
  • 484 Address Incomplete
  • 485 Ambiguous
  • 486 Busy Here
  • 487 Request Terminated
  • 488 Not Acceptable Here
  • 491 Request Pending
  • 493 Undecipherable: Could not decrypt S/MIME body part

5xx = server errors

  • 500 Server Internal Error
  • 501 Not Implemented: The SIP request method is not implemented here
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Server Time-out
  • 505 Version Not Supported: The server does not support this version of the SIP protocol
  • 513 Message Too Large

6xx = global failures

  • 600 Busy Everywhere
  • 603 Decline
  • 604 Does Not Exist Anywhere
  • 606 Not Acceptable

Leave a comment

Filed under Uncategorized

Lync 2013 PowerPoint Sharing: Some presenting features are unavailable due to server connectivity issues

Symptoms

Lync Client 

Users hosted on a Lync 2013 server and using Lync 2013 client are unable to add and present a PowerPoint presentation.  They get the following error in Lync: “Some presenting features are unavailable due to server connectivity issues”

WAC-Server

In the WAC server Application event log you see the following event popping up:

Log Name:      Application
Source:        ASP.NET 4.0.30319.0
Date:          17/01/2013 15:31:51
Event ID:      1310
Task Category: Web Event
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      server.domain.tld
Description:
Event code: 3008 
Event message: A configuration error has occurred. 
Event time: 17/01/2013 15:31:51 
Event time (UTC): 17/01/2013 14:31:51 
Event ID: 398a6469b56349ebae01d8aa9cc019d1 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 
 
Application information: 
    Application domain: /LM/W3SVC/2/ROOT/m-1-130029067086927262 
    Trust level: Full 
    Application Virtual Path: /m 
    Application Path: C:\Program Files\Microsoft Office Web Apps\BroadcastServices_Host\ 
    Machine name: server 
 
Process information: 
    Process ID: 2004 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 
 
Exception information: 
    Exception type: ConfigurationErrorsException 
    Exception message: Could not load file or assembly ‘Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified. (C:\Program Files\Microsoft Office Web Apps\BroadcastServices_Host\web.config line 44)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or assembly ‘Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)

 
 
Request information: 
    Request URL: https://wac.domain.tld:443/m/Presenter.aspx?a=0&e=true&WopiSrc=https://lyncfe.domain.tld/DataCollabWeb/wopi/files/1B-1-1DA545D&access_token=AAMFEMcXMba5uZVbva7TUp_-FpUGEMDL0-g4MKvhBFnFdDwj3oGBEMcXMba5uZVbva7TUp_-FpWCAuHYgyDo5MzCtEE9dxeIRDCiiZ3xBoHMQc25gcSH8JPJC5be-oYInVzkjRnDzwgIDURhdGFDb2xsYWJXZWI&fs=false&rec=false&thm=1&ui=en-US&rs=en-US& 
    Request path: /m/Presenter.aspx 
    User host address: A.B.C.D 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
 
Thread information: 
    Thread ID: 7 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
 
 
Custom event details: 

Event Xml:
<Event xmlns=”http://schemas.microsoft.com/win/2004/08/events/event”&gt;
  <System>
    <Provider Name=”ASP.NET 4.0.30319.0″ />
    <EventID Qualifiers=”32768″>1310</EventID>
    <Level>3</Level>
    <Task>3</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime=”2013-01-17T14:31:51.000000000Z” />
    <EventRecordID>705</EventRecordID>
    <Channel>Application</Channel>
    <Computer>server.domain.tld</Computer>
    <Security />
  </System>
  <EventData>
    <Data>3008</Data>
    <Data>A configuration error has occurred.</Data>
    <Data>17/01/2013 15:31:51</Data>
    <Data>17/01/2013 14:31:51</Data>
    <Data>398a6469b56349ebae01d8aa9cc019d1</Data>
    <Data>1</Data>
    <Data>1</Data>
    <Data>0</Data>
    <Data>/LM/W3SVC/2/ROOT/m-1-130029067086927262</Data>
    <Data>Full</Data>
    <Data>/m</Data>
    <Data>C:\Program Files\Microsoft Office Web Apps\BroadcastServices_Host\</Data>
    <Data>server</Data>
    <Data>
    </Data>
    <Data>2004</Data>
    <Data>w3wp.exe</Data>
    <Data>NT AUTHORITY\NETWORK SERVICE</Data>
    <Data>ConfigurationErrorsException</Data>
    <Data>Could not load file or assembly ‘Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified. (C:\Program Files\Microsoft Office Web Apps\BroadcastServices_Host\web.config line 44)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or assembly ‘Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark&amp; stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)

</Data>
    <Data>https://wac.domain.tld:443/m/Presenter.aspx?a=0&amp;e=true&amp;WopiSrc=https://lyncfe.domain.tld/DataCollabWeb/wopi/files/1B-1-1DA545D&amp;access_token=AAMFEMcXMba5uZVbva7TUp_-FpUGEMDL0-g4MKvhBFnFdDwj3oGBEMcXMba5uZVbva7TUp_-FpWCAuHYgyDo5MzCtEE9dxeIRDCiiZ3xBoHMQc25gcSH8JPJC5be-oYInVzkjRnDzwgIDURhdGFDb2xsYWJXZWI&amp;fs=false&amp;rec=false&amp;thm=1&amp;ui=en-US&amp;rs=en-US&amp;</Data&gt;
    <Data>/m/Presenter.aspx</Data>
    <Data>A.B.C.D</Data>
    <Data>
    </Data>
    <Data>False</Data>
    <Data>
    </Data>
    <Data>NT AUTHORITY\NETWORK SERVICE</Data>
    <Data>7</Data>
    <Data>NT AUTHORITY\NETWORK SERVICE</Data>
    <Data>False</Data>
    <Data>   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.AssemblyInfo.get_AssemblyInternal()
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
</Data>
  </EventData>
</Event>

Background

Integration between Lync Server 2013 and WAC has been done correctly. If you followed the “Deploy Office Web Apps Server” guide this problem occurs because the Windows Server 2012 prerequisites powershell command is incomplete: you need to install the .NET Framework 3.5 feature for WAC to operate correctly. The “Configuring Integration with Office Web Apps Server and Lync 2013” Lync 2013 Library article doesn’t mention this either.

Solution

Use Server Manager to install the .NET Framework 3.5 Feature or use the following PowerShell command to add it afterwards:”Add-WindowsFeature NET-Framework-Features, NET-Framework-Core”

For new WAC installs use the following modified prerequisite installer script:

Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Static-Content,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,InkandHandwritingServices,NET-Framework-Features,NET-Framework-Core

Leave a comment

Filed under Uncategorized

Important Lync report from SQL server – Wireless and Wired

–current daily troubleshooting wireless subnet report (“Wireless Subnets With The Most Poor Streams”) 6/7/2012

–Note: “poor streams” in this report are streams having PacketLossRate > .01

with v2 as

(

select

NetworkKey,

NetworkType,

Network,

NetworkName,

OtherEndpointName,

OtherEndpointIPAddress,

OtherEndpointType,

(case

when CallLength is null then N’NA’

when CallLength <= 30 then N’Dur <= 30 s’

when CallLength <= 60 then N’Dur 31 – 60 s’

when CallLength <= 90 then N’Dur 61 – 90 s’

when CallLength <= 120 then N’Dur 91 – 120 s’

else N’Dur 121+ s’

end) as CallLength,

(case

when CallLength is null then 10

when CallLength <= 30 then 1

when CallLength <= 60 then 2

when CallLength <= 90 then 3

when CallLength <= 120 then 4

else 5

end) as CallLengthOrdinal,

ConferenceDateTime,

SessionSeq,

StreamID,

count(1) over (partition by NetworkKey) as NetAllStreams,

count(IsBadStream) over(partition by NetworkKey) as NetBadStreams,

cast(100.0 * cast(count(IsBadStream) over(partition by NetworkKey) as float) / cast(count(1) over(partition by NetworkKey) as float) as decimal(4, 1)) as NetBadStreamsRatio,

IsBadStream

from

(

select

n1.NetworkKey,

n1.NetworkType,

n1.Network,

n1.NetworkName,

replace(s.CalleeEndpoint, N’.network.microsoft.com’, N”) as OtherEndpointName,

m.CalleeIPAddr as OtherEndpointIPAddress,

uat1.UserAgentType as OtherEndpointType,

datediff(second, s.StartTime, s.EndTime) as CallLength,

a.ConferenceDateTime,

a.SessionSeq,

a.StreamID,

(case when (PacketLossRate > .01 OR PacketLossRateMax > .05) then 1 else null end) as IsBadStream

from

LyncReporting.dbo.[QoE.Session] s with (nolock)

inner join

LyncReporting.dbo.[QoE.MediaLine] as m with (nolock)

on m.ConferenceDateTime = s.ConferenceDateTime

and m.SessionSeq = s.SessionSeq

and m.CallerNetworkConnectionTypeKey in

(select NetworkConnectionTypeKey

from LyncDimensions.dbo.DimNetworkConnectionType with (nolock)

where NetworkConnectionAlternateKey = 1)

inner join

LyncReporting.dbo.[QoE.AudioStream] as a with (nolock)

on a.MediaLineLabel = m.MediaLineLabel

and a.ConferenceDateTime = m.ConferenceDateTime

and a.SessionSeq = m.SessionSeq

inner join

LyncDimensions.dbo.DimNetwork n1 with (nolock)

on m.CallerSubnetKey = n1.NetworkKey

and n1.Network <> N’Unknown’

and n1.NetworkType in (‘VoIP’, ‘RAS/VPN’, ‘Corpnet’)

inner join

LyncDimensions.dbo.DimUserAgent ua1 with (nolock)

on s.CalleeUserAgentKey = ua1.UserAgentKey

inner join

LyncDimensions.dbo.DimUserAgentType uat1 with (nolock)

on ua1.UserAgentTypeKey = uat1.UserAgentTypeKey

and uat1.UserAgentTypeAlternateKey in (1, 2)

where

s.ConferenceDateTime >= (@beginTime) and s.ConferenceDateTime < (@endTime)

and m.CallerInside = 1

and m.CalleeInside = 1

union

select

n1.NetworkKey,

n1.NetworkType,

n1.Network,

n1.NetworkName,

replace(s.CallerEndpoint, N’.network.microsoft.com’, N”) as OtherEndpointName,

m.CallerIPAddr as OtherEndpointIPAddress,

uat1.UserAgentType as OtherEndpointType,

datediff(second, s.StartTime, s.EndTime) as CallLength,

a.ConferenceDateTime,

a.SessionSeq,

a.StreamID,

(case when (PacketLossRate > .01 OR PacketLossRateMax > .05) then 1 else null end) as IsBadStream

from

LyncReporting.dbo.[QoE.Session] s with (nolock)

inner join

LyncReporting.dbo.[QoE.MediaLine] as m with (nolock)

on m.ConferenceDateTime = s.ConferenceDateTime

and m.SessionSeq = s.SessionSeq

and m.CallerNetworkConnectionTypeKey in

(select NetworkConnectionTypeKey

from LyncDimensions.dbo.DimNetworkConnectionType with (nolock)

where NetworkConnectionAlternateKey = 1)

inner join

LyncReporting.dbo.[QoE.AudioStream] as a with (nolock)

on a.MediaLineLabel = m.MediaLineLabel

and a.ConferenceDateTime = m.ConferenceDateTime

and a.SessionSeq = m.SessionSeq

inner join

LyncDimensions.dbo.DimNetwork n1 with (nolock)

on m.CalleeSubnetKey = n1.NetworkKey

and n1.Network <> N’Unknown’

and n1.NetworkType in (‘VoIP’, ‘RAS/VPN’, ‘Corpnet’)

inner join

LyncDimensions.dbo.DimUserAgent ua1 with (nolock)

on s.CallerUserAgentKey = ua1.UserAgentKey

inner join

LyncDimensions.dbo.DimUserAgentType uat1 with (nolock)

on ua1.UserAgentTypeKey = uat1.UserAgentTypeKey

and uat1.UserAgentTypeAlternateKey in (1, 2)

where

s.ConferenceDateTime >= (@beginTime) and s.ConferenceDateTime < (@endTime)

and m.CallerInside = 1

and m.CalleeInside = 1

) as v1

),

v3 as

(

select top 10 NetworkKey

from (select distinct NetworkKey, NetBadStreams from v2) as v

order by NetBadStreams desc

)

select

max(Network) as Network,

max(NetworkType) as NetworkType,

max(NetworkName) as NetworkName,

OtherEndpointName,

max(OtherEndpointIPAddress) as OtherEndpointIPAddress,

max(OtherEndpointType) as OtherEndpointType,

max(NetAllStreams) as NetAllStreams,

max(NetBadStreams) as NetBadStreams,

max(NetBadStreamsRatio) as NetBadStreamsRatio,

max(CallLength) as CallLength,

CallLengthOrdinal,

count(1) as TotalStreams,

count(IsBadStream) as BadStreams

from v2 inner join v3 on v2.NetworkKey = v3.NetworkKey

group by

v2.NetworkKey,

OtherEndpointName,

CallLengthOrdinal

——————————————————————————————————————-

To produce this report: ( Poor call broken down by modality)

Ouput  Screen shot :   

Use the following SQL query:

 

 

 

 

 

use qoemetrics

DECLARE              @START_DATE  DATETIME

DECLARE              @END_DATE      DATETIME

SET         @START_DATE                  = ‘1/21/2013 11:21:06 PM’

SET         @END_DATE                      = ‘1/28/2013 11:21:06 PM’;

WITH P2P_Audio_FullJoin AS

(

SELECT

CallerInside, CalleeInside, CallerNetworkConnectionType, CalleeNetworkConnectionType,

CASE

WHEN (CallerInside = 1 AND CalleeInside = 1) THEN ‘BothInside’

WHEN (CallerInside = 0 AND CalleeInside = 0) THEN ‘BothOutside’

ELSE ‘Inside-Outside’

END AS Location,

CASE

WHEN (CallerNetworkConnectionType = 0 AND CalleeNetworkConnectionType = 0) THEN ‘BothWired’

WHEN (CallerNetworkConnectionType = 1 AND CalleeNetworkConnectionType = 1) THEN ‘BothWireless’

ELSE ‘Wired-Wireless’

END AS ConnectionType,

CASE WHEN (Session.ClassifiedPoorCall = 1) THEN 1 ELSE NULL END AS IsPoorCall,

Session.ClassifiedPoorCall

FROM   Session

INNER JOIN UserAgent AS CallerUA WITH(NOLOCK)

ON                         Session.CallerUserAgent = CallerUA.UserAgentKey

INNER JOIN UserAgent AS CalleeUA WITH(NOLOCK)

ON                         Session.CalleeUserAgent = CalleeUA.UserAgentKey

INNER JOIN UserAgentDef AS CallerUADef WITH(NOLOCK)

ON                         CallerUADef.UAType = CallerUA.UAType

INNER JOIN UserAgentDef AS CalleeUADef WITH(NOLOCK)

ON                         CalleeUADef.UAType = CalleeUA.UAType

INNER JOIN MediaLine AS AudioLine WITH(NOLOCK)

ON                         AudioLine.ConferenceDateTime = Session.ConferenceDateTime

AND       AudioLine.SessionSeq = Session.SessionSeq

AND       AudioLine.MediaLineLabel = 0 /*0=audio,1=video*/

/*

INNER JOIN AudioStream WITH(NOLOCK)

ON AudioStream.ConferenceDateTime = Session.ConferenceDateTime

AND AudioStream.SessionSeq = Session.SessionSeq

AND AudioStream.MediaLineLabel = AudioLine.MediaLineLabel

AND Session.ClassifiedPoorCall is not null

*/

WHERE Session.StartTime >= @START_DATE AND Session.EndTime < @END_DATE

AND (

( /*CallerUA.UAType = 1 OR*/   –MS

CallerUA.UAType = 4 OR                             –OC

CallerUA.UAType = 8 OR                             –OCPhone

CallerUA.UAType = 16 OR                          –LMC

CallerUA.UAType = 64 OR                          –Mac Messenger

CallerUA.UAType = 128 OR                        –Attendant

CallerUA.UAType = 512 OR                        –CAA

CallerUA.UAType = 1024 OR                      –RGS

CallerUA.UAType = 16386 OR   –Como

CallerUA.UAType =16387                           –CWA

/*CallerUA.UAType = 16393*/ –EXUM

)

AND

( /*CalleeUA.UAType = 1 OR*/  –MS

CalleeUA.UAType = 4 OR                            –OC

CalleeUA.UAType = 8 OR                            –OCPhone

CalleeUA.UAType = 16 OR                         –LMC

CalleeUA.UAType = 64 OR                         –Mac Messenger

CalleeUA.UAType = 128 OR                       –Attendant

CalleeUA.UAType = 512 OR                       –CAA

CalleeUA.UAType = 1024 OR                     –RGS

CalleeUA.UAType = 16386 OR  –Como

CalleeUA.UAType =16387                          –CWA

/*CalleeUA.UAType = 16393*/                –EXUM

)

)

),

Totals as

(

SELECT COUNT(*) AS NumSessions FROM P2P_Audio_FullJoin

)

SELECT

DISTINCT Location, ConnectionType, COUNT(*) AS NumSessions, COUNT(IsPoorCall) AS PoorSessions

FROM P2P_Audio_FullJoin

GROUP BY Location, ConnectionType

ORDER BY Location, ConnectionType

Leave a comment

Filed under Uncategorized

Using IIS Application Request Routing (ARR) as a TMG Replacement

So this won’t be shocking news but Microsoft has stopped selling Forefront Threat Management Gateway (TMG) and they really didn’t give us any good alternatives.  Officially, they tell you to use the Unified Access Gateway but anyone who uses it knows that 1) it’s a massive pain to setup 2) it’s really expensive 3) it breaks autodiscover and mobility.

So this leaves us to use third party hardware load balancers but I’m not much of a fan of doing firewall rules directly to the HLB.  The nice thing about the reverse proxy is that it served as a separation between the internet and production.  So I have found some articles on the web about IIS ARR with Lync but they all seem to be 1) not written for Lync 2013 2) don’t work with mobility 3) are too vague 4) assume that you are going to bind one service to one IP – which works find but sometimes people want to not take up a ton of IP’s on the internet to deploy one service.

So this will attempt to guide you through the configuration of ARR to work with Lync Server 2013.

UPDATE: I’ve been asked does this work with Lync Server 2010 and the answer is yes.  I haven’t spent as much time testing every option yet but it does appear to work fine.

Installation

First you need to install IIS on your Windows 2008 R2 or Windows 2012 Server.  I like to click the Application Server which will install pretty much everything you need in terms of .NET Framework.

The second item you need is ARR. This can be installed by downloading version 2.5 + hotfixes from Microsoft’s website or you can use the Web Installer (http://www.microsoft.com/web/downloads/platform.aspx).  This is how I typically install the product:

pic1

 

Search for ARR and select Application Request Routing 2.5 (which will select the hotfixes) and install search for rewrite and install URL Rewrite 2.0.

NOTE: I see that 3.0 Beta is now available.  Feel free to try it out – it worked for me but I’m going to production with ARR so I want to use non-beta software for now.

IIS Configuration

This isn’t meant to be an all encompassing lesson on how to use IIS so I’m going to assume you have some basics under your belt.  You need to make sure that your public certificate is installed on the IIS server.  Go to bindings of your default website and bind your SSL certificate to this server.  This certificate must have a private key associated with it.  Also, make sure that your internal root certificate authority is installed on this server as well.  My test server is not domain joined so I have to install it manually.

Ultimately, your website is going to contain the IP address you plan to listen on.  So this is very similar to the concept of a listener from the TMG world.  You have the same limitation in terms of certificates and IP’s in IIS as you do in TMG.  So if you have two certificates you plan to use on the reverse proxy you will need to bind two IP’s to your IIS server and create two websites.  This guide is going to assume a single website/single IP address for Lync, Exchange and Office Web Apps (OWAS) as I have a single certificate with all of those names on it.

ARR Configuration

NOTE: I had a section on how to enable the proxy within ARR here at first because I was under the impression it was needed for this to work.  Got word from a Lync friend that it wasn’t needed and indeed it was an extra step in the configuration that didn’t harm anything just wasn’t required for the configuration.  Thank Corrado!

Server Farms

Server farms are the targets of where we might send traffic to.  There isn’t a direct correlation to something in TMG but the big thing to know is that ARR does more than just a reverse proxy.  It is a load balancer and more.  So we need to create a farm for Lync.

In IIS Manager, Click on Server Farms and right-click and choose Create Server Farm.

pic5

 

Enter a name

pic6

Click Next

pic7

Enter the server IP address.  Click on advanced settings and change httpPort to 8080 and httpsPort to 4443.  If you are going to use the load balancing feature, add all of your front-end servers in the pool.  If you have a HLB, than this server IP should be going to your HLB.

pic8

 

You will get this message.  Click the Yes button to create a default rules.

pic9

Now you should see your new server farm.  Click on the Lync farm you just created and find Routing Rules.  Double click on it and disable SSL Offloading. There is no reason to offload on the ARR box as far as I can figure out.  If someone has a good reason to leave it on let me know.

pic10

Make sure to click Apply in the Action pane on the right when you are making changes in IIS.

Your farm is now configured and setup.  If you want you can create two more farms, one for Exchange and one for OWAS.

URL Rewrite Rules

Now it’s time to get to the meat and potatoes of the configuration.  We are now going to setup URL Rewrite (or really reroute rules).  This is very similar to the firewall rules that you had in TMG.  They don’t have all of the same features but covers what we need.

In IIS Manager, click on the Server

pic11

 

NOTE: This is URL Rewrite on the server.  Don’t go to the website.  There is a URL rewrite option there as well.

When you go into URL Rewrite you will find two default rules created for you.  The first is the SSL rule and the second is the HTTP rule.  Since I don’t want to use the HTTP rules I am simply disabling them.  You could delete them if you want I suppose as well.

pic12

 

Double click the ARR_Lync_Loadbalance_SSL rule and let’s understand what you see here:

pic13

 

In the Match URL is basically what we are going to make after the / in the URL.  So if our URL was http://www.domain.com/website the pattern would be /website for example.  You will see under Using you will have the option to use Regular Expressions.

The Conditions is a set of inputs that are required to match this rule.  Here we will we have HTTPS which basically means we must match SSL requests only.

pic14

 

This is a continuation of the above.  The Action section tells us what we should do if we match.  So here we will route to the Lync Server Farm.  This part is pretty straight forward and will be basically the same for all rules.  So let’s create our first Lync Rule.

Meeting/Dialin/External Web Services Rule

Here you have some options based on how you do your simple URLs.  If you do “Option A” where you URL would look like:

https://meet.domain.com and https://dialin.domain.com then you would need to use the below rule.

pic1

Change Using to: Regular Expression

Change Pattern to: (.*)

If you use Option B where your simple URLs might look like this:

https://meet.domain.com/ID/ and https://meet.domain.com/dialin/ your rule would look like this.

pic2

((?:^dialin|^id|^Abs|^autodiscover|^CertProv|^CollabContent|^Fonts|^GroupExpansion|^HybridConfig|^lwa|^mcx|^PassiveAuth|^PersistentChat|^Reach|^RequestHandlerExt|^RgsClients|^Scheduler|^Storage|^ucwa|^WebTicket).*)

NOTE: You will need to change dialin and id to whatever you use if using Option B for simple URL’s

NOTE: This is the list of all potential directories as of RTM of Lync 2013.  CU1 will most likely add some items so this may need to be edited.

Add to Conditions: {HTTP_HOST} on the pattern of (externalwebservices.domain.com|dialin.domain.com|meet.domain.com).

NOTE: You should NOT add LyncDiscover.domain.com to this rule.  The reason we don’t want to add this is because our regular expression doesn’t include the root of the website and lyncdiscover.domain.com/?sipuri= won’t match any of these rules.  If you wanted to, you could change your pattern to (.*) and add lyncdiscover.domain.com to the list. I don’t have a good reason to do it either way.  Whatever makes the most sense to you but I like to separate them out.

Lync Discover Rule

Now we create a rule for Lync Discover services.  Here is what I have created.  This rule is created as brand new and not one of the existing rules.

pic16

 

Here I am defining my pattern match as any request (.*) anything from lyncdiscover.thegaragelab.info URL.  Here I am not requiring HTTPS on this rule Lync Discover will use either HTTP or HTTPS.

OWAS Rule Setup

If you created your web server farm for OWAS you should have your default rules again.  So if I look at that rule:

pic17

 

This rule again is pretty straight forward.  We are matching anything intended to go to owas.domain.com.  The big difference is under Action, our Server Farm is now OWAS and not Lync.  You can do the same thing with Exchange or other services as well.  Here is my completed configuration:

pic18

 

Services Tested

I have tested the following services to make sure they work through ARR.

  • Meeting Join URL
  • Dial-In Website
  • Web Scheduler
  • Mobility

The only thing I haven’t tested thus far is the Lync MX (Metro/Win 8) client.  I’ll try to get remote of my lab and test that later this week.  My history thus far with the Lync MX client is a complete crap shoot – where mobility works but MX doesn’t.

Troubleshooting

So what are some common problems I’ve found while setting up ARR.

#1 – Make sure you can reach your websites from your ARR server.  If the ARR server can’t reach these websites it’s not going to work from the outside.

#2 – Certificates.  Ensure that your internal server has your internal CA root certificate.  If this box isn’t a domain joined server, it won’t be there.  If you did #1 you shouldn’t have this issue because you would have fixed it when the certificate error appeared.

#3 – Make sure your internal certificates have the right names.  For example on OWAS.  If your internal FQDN is owas.intdomain.com and your external FQDN is owas.domain.com, your internal certificate should have BOTH names on it.  Your internal users will look up based on the internal name and when your external people go to that server, they will proxy through ARR with the external name.  It doesn’t have to be a public certificate but it needs to have the name.

Hopefully that covers the most issues you might run into and this gets you on the right page for using ARR and Lync 2013.

UPDATE

I found that you will want to adjust the timeout on the IIS or you will see some timeouts with the new Lync 2013 Mobile Client.  On the Proxy Settings | Time-out – change from 30 seconds to 180 second.

 

Picture

Leave a comment

Filed under Uncategorized

Lync and Exchange UM Integration

This article covers the Unified Messaging (UM) integration configuration between Lync Server 2010 Release Candidate and Exchange Server 2010 SP1.  Although the process is basically the same as it was in Exchange 2007 and OCS 2007 R2 there are a few important changes.  Also note these instructions were tested various times with both RC and RTM installations of Lync Server.

The lab environment used as examples was built using the same processes discussed in these three previous articles for Lync Server.  A single consolidated Exchange 2010 SP1 server was also added with all roles (CAS, Hub, Mailbox, UM).

Overview

The following steps completed in this order in a greenfield deployment should yield a working UM environment in little time.

  1. Deploy Exchange Server 2010 SP1 in same forest as a consolidated server with Unified Messaging role included.
  2. Replace the self-signed certificate with one from an internal Windows Enterprise Certificate Authority and reassign all Exchange roles to it.
  3. Create a new SIP Dial Plan in Exchange.
  4. Configure UM Dial Plan, Policy, and Auto Attendant settings.
  5. Enable Unified Messaging on at least one mailbox.
  6. Run the exchucutil.ps1 PowerShell script on the Exchange server.
  7. Configure Lync Server Dial Plan or verify existing configuration is sufficient.
  8. Run the ocsumutil.exe tool on the Lync server.

Configuration

These steps begin right where article 3 left off so if you are following along make sure to configure the Enterprise Voice setting in Lync Server as detailed in that article.

1.  Deploy Exchange Server

The deployment of Exchange Server 2010 SP1 is outside the scope of this article but there are many official and unofficial walkthroughs available online to help anyone unfamiliar with the Exchange Server deployment process.  The best place to start would be the official Microsoft documentation.  The host used in this lab is a separate, dedicated virtual guest running Windows Server 2008 R2 with 2GB of RAM assigned to it.  No previous instance of Exchange had been installed so the deployment included creating a new Exchange Organization.

Prior to deploying the Exchange Server make sure to install all of the prerequisite software for the UM role as documented in this checklist.  Pay special attention to the Microsoft Speech PlatformUC Managed API 2.0, and UM Language Packinstallations.

2. Generate New Certificate

This step is a common Exchange deployment task and official instructions can be found here.  Note that the statement “you must use a public certificate if you are using Unified Messaging with Office Communications Server” is not entirely correct.  This really should state that a ‘trusted certificate’ is required, as a private certificate issued by an internal Enterprise Windows CA can be used and will work fine if both the Lync and Exchange servers are members of the same domain.  Also verify that the UM service is assigned to the new certificate once it is installed and the UM service was restarted.

When collocating the UM role on a consolidated Exchange Server the easiest configuration is to use a single SAN certificate for all Exchanges services with the server’s FQDN set as the Subject Name (e.g. lab1exch.csmvp.net) with any other required names (e.g. mail.csmvp.net, autodiscover.csmvp.net) added to the Subject Alternative Names field.

3. Create Exchange UM Dial Plan

In this deployment the VoIP Security option Secured was used used so that both SIP signaling traffic and RTP media traffic will be transmitted between Lync and Exchange using encrypted TLS communications.  Opting to use the SIP Secured setting would only protect the SIP traffic using TLS while all RTP traffic would be transmitted over TCP.

Additionally a value of 4 was selected for the number of digits in extension numbers as the dial plan previously configuredin the Lync server is based on the pattern 312-555-75xx, where the last four digits are treated as the user’s extension.  Since normalization patterns were created to translate 75xx patterns into RFC 3966 patterns (+131255575xx) then we want the Exchange UM dial plan to automatically select the last 4 digits of the user’s Telephone Number field as their extension when they are later enabled for UM.

  • Using the Exchange Management Console navigate to the UM Dial Plans tab under Organization Configuration >Unified Messaging.  Create a new UM Dial Plan with any Name desired (e.g. DefaultUM), and any valid PIN length (e.g.4). The URI Type must be set to SIP URI and the VOIP Security was set to Secured.  As this lab is using a North American dialing plan the Country/Region Code was set to 1.

image

    An improvement in the Exchange Server 2010 process is seen next as the wizard will ask which UM server to associate the new dial plan with.  Previously with Exchange Server 2007 this step had to be performed manually afterwards.
  • Select the consolidated Exchange server running the UM role and then complete the wizard.

image

During the wizard completion the following error may appear as the default UM service startup mode is set to TCP and is not compatible with the VoIP Security option selected.  This will also prevent the Unified Messaging service from starting on the Exchange server.

The VoIPSecurity type of dial plan(s) ‘DefaultUM’ does not match the UMStartupMode of Unified Messaging server ‘LAB1EXCH’. Please ensure that if the UMStartupMode of the Unified Messaging server is TCP, the dial plan has a VoIPSecurity type of Unsecured. If the UMStartupMode of the Unified Messaging server is TLS, the dial plan should have a VoIPSecurity type of either SIPSecured or Secured.

  • To resolve this issue complete the wizard and then use the Exchange Management Console to navigate to the UM Settings tab on the UM server properties located under Server Configuration Unified Messaging.  Change the Startup Mode to TLS.  (Dual could also have been selected but in this lab all communications will be using TLS so there is no reason to for the UM service to listen over TCP as well.  This approach is also more secure in production deployments.)

image

  • To apply this change the Microsoft Exchange Unified Messaging service must be restarted, although it should not even be running at this point so then it just needs to be started.

Alternatively the Exchange Management Shell can be used with the following PowerShell cmdlets to perform all of the steps shown above in this section.

New-UMDialPlan -Name ‘DefaultUM’ -NumberOfDigitsInExtension ’4′ -URIType ‘SipName’ -VoIPSecurity ‘Secured’ -CountryOrRegionCode ’1′

Set-UMServer -Identity ‘LAB1EXCH’ -DialPlans ‘DefaultUM’ -UMStartupMode ‘TLS’

Start-Service MSExchangeUM

4. Configure UM Settings

This first step is optional but I typically prefer to tweak a couple settings before enabling users for UM, specifically the minimum PIN length as the default of 6 is annoyingly long for demo purposes, plus enabling common patterns allows me to set easy-to-remember PINs like ‘1234’ or ‘1111’.

  • From the PIN policies tab on the default UM Mailbox Policy set the Minimum PIN Length to and enable Allow common patterns in PIN.

image

 

Next is the Exchange Subscriber Access and Auto Attendant configuration.  As this lab is using 312-555-75xx in the Lync Dial Plan I selected 7556 and 7557 for the SA and AA telephone numbers.

  • Enter the desired telephone number on the Subscriber Access tab of the newly created UM Dial Plan (e.g.+13125557556).

image

    • Create a new UM Auto Attendant with any Name (e.g. AutoAttendant) (do not include any spaces) and enter the desired phone number in the Pilot Identifier List (e.g. +13125557557).  Select the new UM Dial Plan as the associated dial plan and select both settings to enable and speech-enable the auto attendant.

image

  • Alternatively the PowerShell cmdlet shown below can be used to create the new UM Auto Attendant with the setting described above.

New-UMAutoAttendant -Name ‘AutoAttendant’ -UMDialPlan ‘DefaultUM’ -Status ‘Enabled’ -SpeechEnabled $true -PilotIdentifierList ‘+13125557557′

5. Enable Mailboxes for UM

Select at least one mailbox using the Exchange Management Console and enable Unified Messaging on it.  This account should already be enabled for Lync Server and Enterprise Voice.

  • Run the Enable Unified Messaging wizard on the mailbox and select the default policy.  Retain the automatic settings but verify that the extension and SIP address shown match the desired settings for that user.

image

image

Once again, the Exchange Management Shell can be used to perform the same step, as shown by the following cmdlet.

Enable-UMMailbox –Identity ‘kristina’ -PinExpired $false -UMMailboxPolicy ‘DefaultUM Default Policy’ -Extensions ’7502′ -SIPResourceIdentifier ‘Kristina@csmvp.net’ 

  • Verify that the EUM and SIP addresses are properly configured on the mailbox after the wizard completes.

image

6. Run Exchange UC Configuration Script

This script is basically unchanged in SP1 and performs the same actions: creating the UM IP Gateway and IP Hunt Group as well as granting permissions to Lync server to read specific UM-related objects in Active Directory.

Make sure to allow for any outstanding AD replication to complete before running this script so that the newly created UM dial plan and any other changes are read by the script in their updated state.  If run to soon sometimes the Dial Plans listed in the last line of the script output will display as “not found” even though the configuration would typically be functional at that point.  If that happens it is safe to re-run the script multiple times at it will identify any successful previous changes and thus report that no new changes were applied in those cases.

  • Using the Exchange Management Shell execute the exchucutil.ps1 script located in the Exchange Server’s Scriptsdirectory, as shown in the path below.

[PS] C:\Program Files\Microsoft\Exchange Server\v14\Scripts>.\ExchUCUtil.ps1

Using Global Catalog: GC://DC=csmvp,DC=net

Configuring permissions for csmvp.net\RTCUniversalServerAdmins … 
CSMVP Net: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects. 
UM DialPlan Container: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects. 
UM AutoAttendant Container: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects.

Configuring permissions for csmvp.net\RTCComponentUniversalServices … 
CSMVP Net: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects. 
UM DialPlan Container: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects. 
UM AutoAttendant Container: The appropriate permissions haven’t been granted for the Office Communications Servers and Administrators to be able to read the UM dial plan and auto attendants container objects in Active Directory. The correct permissions are being added to the container objects.

Configuring UM IP Gateway objects… 
Pool: lab1ls.csmvp.net 
A UMIPGateway doesn’t exist in Active Directory for the Office Communications Server Pool. A new UM IP gateway is being created for the Pool. 
IsBranchRegistrar: False 
MessageWaitingIndicatorAllowed: True 
OutcallsAllowed: True 
WARNING: The command completed successfully but no settings of ’1:1′ have been modified. 
Dial plans: DefaultUM

Permissions for group csmvp.net\RTCUniversalServerAdmins

ObjectName                     AccessRights                   Configured 
———-                     ————                   ———- 
CSMVP Net                      ListChildren                   True 
UM DialPlan Container          ListChildren, ReadProperty     True 
UM AutoAttendant Container     ListChildren, ReadProperty     True

Permissions for group csmvp.net\RTCComponentUniversalServices

ObjectName                     AccessRights                   Configured 
———-                     ————                   ———- 
CSMVP Net                      ListChildren                   True 
UM DialPlan Container          ListChildren, ReadProperty     True 
UM AutoAttendant Container     ListChildren, ReadProperty     True

PoolFqdn                       UMIPGateway                    DialPlans 
——–                       ———–                    ——— 
lab1ls.csmvp.net               1:1                            {DefaultUM}

7. Configure Lync Dial Plans

As mentioned earlier the Lync Server voice configuration is already complete.  To validate which settings are required in Lync follow just the Enabling Enterprise Voice section of this previous article (the Deploying a Media Gateway section is not required for UM connectivity.)

  • To validate the configuration will support the extension dialing configured for the SA and AA UM objects use the Lync Server Control Panel to create a New Voice Test Routing Case.  Enter the SA extension (e.g. 7556) and the Expected translation (e.g. +13125557556) and make sure the test passes. 

image

8. Run Lync UM Configuration Tool

This utility is used to create the AD contact objects for Lync Server to resolve and locate the Exchange Subscriber Access and Auto Attendant services.

In the past it was always required to configure the UM Dial Plan name to be the identical FQDN as what the OCS Location Profile was named.  But now with SP1 on Exchange Server 2010 that is no longer required, as indicated by the informational text on the bottom of the next screenshot.

  • Execute the OcsUmUtil.exe program located in the Lync Server’s Support directory, as shown in the path below.

C:\Program Files\Common Files\Microsoft Lync Server 2010\Support\OcsUmUtil.exe

  • Click Load Data and the Active Directory forest name should populate the Exchange UM Dial Plan Forest field.

image

  • Click Add to create the Subscriber Access contact first.  Select the desired Organizational Unit and Name.  The defaults can be used for the remainder of the settings.

     

     

  • Click Add again to create another contact and select Auto-Attendant as the Contact Type. Select the desiredOrganizational Unit and Name.  The defaults can be used for the remainder of the settings as well.

image

image

  • Close the Exchange UM integration Utility and force an address book update in a Lync client to verify the new Exchange contacts.  Depending on the AD forest configuration replication may need to complete before attempting the address book update process.

image     image

At this point calls to either attendant should work and Voice Mail access for the enabled users will be available from Outlook and Lync clients.  If calls to the Auto Attendant are failing, then take a look at the resolution in my next article.

Leave a comment

Filed under Uncategorized

Microsoft Lync resources

Microsoft Lync Resources

 
Implementing Lync 2010
http://www.theocsinsider.com/

Integrating snomONE/pbxnsip and OCS/Lync Step by Step:
http://kiwi.pbxnsip.com/index.php/Office_Communications_Server

How To Setup Lync Front End (imaucblog)
Exchange UM Integration (jeff shertz)

Client Lync Setup: Push Addressbook to Lync Immediately Make Lync work even on PCs not domain joined Update Lync Phone Edition | AD Photos | AD Photos2 |

How To Setup Lync to PSTN
How To Setup Audiocodes FXS to Lync
How to Setup Audiocodes MP-124 FXS
How to Setup an Intelepeer SIP Trunk
Link Asterisk and Lync

Lync Training Videos
http://www.youtube.com/MicrosoftLync

Lync Pricing
http://www.microsoft.com/en-us/lync/pricing-licensing.aspx
http://ullmark.wordpress.com/2010/09/16/microsoft-lync-2010/

Forum:
http://social.technet.microsoft.com/Forums/en/category/ocs

Lync 2010 API/Examples
Lync 2010 SDK Download
http://blogs.msdn.com/b/lync_by_lync/archive/2010/10/07/hello-lync.aspx

Lync Server 2010 API/Examples
http://htmlpresencecontrols.codeplex.com/documentation

Lync Addons / Modules / ValueAdds
Who Can Federate Tool – See which of your Outlook contacts has Lync! Free
Lync Click-To-Call for IE 
Control Your snom Phone from  Lync 2010 Free
Lync Conversation Translator Free
LyncAddContacts
WebChat Widge from OrbitOne Free
Provision New AD/Exchange/Lync User Easily Free
Response Group Holiday Edit GUI Free

Lync Diagnostics
https://www.testocsconnectivity.com/
http://www.insideocs.com/Tools/MOCLogin.htm Free (Lync Sign-In Troubleshooting Tool)
Get-csconnections PowerShell Script Free (By Pat Richard)
Lync Online Transport Reliability IP Probe (by Lync Online)

Lync Server / UCMA 3.0 Examples
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=4493baab-6214-4770-8cf9-69c813e8a9fa

http://msdn.microsoft.com/en-us/library/gg448472.aspx

Leave a comment

Filed under Uncategorized