How to: Create and manage SIP transactions
Learn how to use the Transaction class to create and manage SIP transactions in a Microsoft Lync Server 2013 deployment.
The Microsoft.Rtc.Sip namespace defines a base type, Transaction, that represents the basic properties that are used in a SIP transaction. This includes the request that started the transaction, responses that are handled by the transaction, and events that are used to catch transaction status changes (such as time-out events or cancellations).
The following types are derived from the Transaction class:
The ClientTransaction instance represents a client transaction.
The ServerTransaction instance represents a server transaction.
The ServerTransaction instance is obtained by referencing the ServerTransaction property on the RequestReceivedEventArgs instance, when a RequestReceivedEventArgs object is dispatched to the designated method. The request it was created to service can be obtained by using one of the following properties:
The RequestReceivedEventArgs; Request property
Client transactions must be created programmatically by calling CreateBranch() on the ServerTransaction. The UAC case, where a client transaction originates a request and does not have a parent server transaction, is not supported.
To fork a message, ServerTransaction.CreateBranch can be called as many times as forks are needed. To send a request to each fork, call SendRequest(Request) on each branch.
Responses to serviced requests are obtained by registering a handler for the ResponseReceived event. When this event is raised, any response that is received by Lync Server 2013 that matches the originating request is sent as a ResponseReceivedEventArgs object to the method registered by using the ResponseReceivedEventHandler delegate.
Responses can also be raised by using dispatches from the message filter script when it is set to filter responses. In this case, the response will be out-of-context because there is no ClientTransaction object on the server that originated the request. In this case, the new ClientTransaction object is obtained by referencing the ClientTransaction property on the ResponseReceivedEventArgs instance. The server transaction that forwards the response is obtained by referencing the ServerTransaction property on this ClientTransaction instance, which contains the new ServerTransaction instance to handle it.