基于托管 SIP 应用程序 API 构建的第二个 Lync 应用程序未接收 SIP 消息
Posted
技术标签:
【中文标题】基于托管 SIP 应用程序 API 构建的第二个 Lync 应用程序未接收 SIP 消息【英文标题】:Second Lync application built on Managed SIP Application API is not receiving SIP messages 【发布时间】:2014-06-30 07:57:01 【问题描述】:我们希望在同一前端服务器上运行两次基于托管 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】:使用不同的名称注册服务器应用程序:
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"
这应该足够了。
【讨论】:
以上是关于基于托管 SIP 应用程序 API 构建的第二个 Lync 应用程序未接收 SIP 消息的主要内容,如果未能解决你的问题,请参考以下文章
基于 Ionic 3 中的第一个 DropDownSelect 显示/隐藏第二个 DropDownSelect