【发布时间】: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 属性。
【问题讨论】: