我们在托管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属性。
答案 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"
这应该足够了。