在Managed SIP Application API上构建的第二个Lync应用程序未接收SIP消息

时间:2014-06-30 07:57:02

标签: sip managed lync

我们在托管SIP应用程序API上构建了相同的应用程序,我们希望在同一台前端服务器上运行两次。他们使用相同的名称,相同的MSPL脚本和相同的代码,除了他们的配置(.config)略有不同。

我们开始正常工作的第一个实例正在接收SIP消息,但是一旦第二个实例启动,第一个实例就不再接收任何SIP消息,现在只有第二个实例正在接收SIP消息。我们希望我们的两个实例都能处理到目前为止我们未成功的所有SIP消息。

我们用于分发SIP消息的MSPL脚本是:

<?xml version="1.0"?>
<r:applicationManifest
 r:appUri="http://example.com/ProgramName"
 xmlns:r="http://schemas.microsoft.com/lcs/2006/05">

  <!-- Handle incoming requests to Lync server -->
  <r:requestFilter methodNames="ALL"
                   strictRoute="true"
                   registrarGenerated="true"
                   domainSupported="true"/>

  <!-- Handle outgoing requests to Lync server-->
  <r:responseFilter reasonCodes="ALL"/>

  <r:splScript>
    <![CDATA[

if (sipRequest)
{
  //Ignoring benotify events.
  if(sipRequest.Method =="BENOTIFY")
  {
    return;
  }

  Dispatch("OnRequest");
}
else
{
  Dispatch("OnResponse");
}

]]>
  </r:splScript>
</r:applicationManifest>

由以下OnRequest和OnResponse消息处理:

public void OnRequest(object sender, RequestReceivedEventArgs evt)
{
  // Do some stuff with evt.Message

  evt.ServerTransaction.EnableForking = false;
  evt.ServerTransaction.CreateBranch().SendRequest(message.Message as Request);
}

public void OnResponse(object sender, ResponseReceivedEventArgs evt)
{
  // Do some stuff with evt.Message

  evt.ClientTransaction.ServerTransaction.SendResponse(message.Message as Response);
}

以下是这些程序如何注册为服务器应用程序(从Get-CsServerApplication输出):

Identity   : Service:Registrar:FQDN/ExampleProgramName
Priority   : 12
Uri        : http://example.com/ProgramName
Name       : ExampleProgramName
Enabled    : True
Critical   : False
ScriptName : 
Script     : 

Identity   : Service:Registrar:FQDN/ExampleProgramName
Priority   : 13
Uri        : http://example.com/ProgramName
Name       : ExampleProgramName
Enabled    : True
Critical   : False
ScriptName : 
Script     : 

我们也尝试以不同的名称注册相同的应用程序。例如,我们在MSPL脚本和New-CsServerApplication中将两个实例中的一个重命名为ExampleProgramName2,这两个实例也不起作用。

特别是,我们不确定MSPL脚本中的requestFilter和特定的SendResponse / SendRequest方法调用以及EnableForking属性。

1 个答案:

答案 0 :(得分:0)

使用不同的名称注册服务器应用程序:

New-CsServerApplication -Identity FQDN/ExampleProgramName1 -Uri http://example.com/ProgramName1 -Critical $False
New-CsServerApplication -Identity FQDN/ExampleProgramName2 -Uri http://example.com/ProgramName2 -Critical $False

除了在MSPL中为每个程序指定其唯一名称,以匹配New-CsServerApplication的Uri参数中给出的值:

<r:applicationManifest
  r:appUri="http://example.com/ProgramName1"

<r:applicationManifest
  r:appUri="http://example.com/ProgramName2"

这应该足够了。