2015-01-22 5 views
0

Я пишу приложение Lync MSPL, используя манифест и службу Windows. В моей manifest.am У меня есть следующий код:Почему я получаю исключение MSPL «ProxyRequest действителен только для sipRequest»

<?xml version="1.0"?> 
<r:applicationManifest 
r:appUri="http://www.company.no/LyncServerFilter" 
xmlns:r="http://schemas.microsoft.com/lcs/2006/05"> 

<r:requestFilter methodNames="ALL" 
      strictRoute="true" 
      domainSupported="false"/> 

<r:responseFilter reasonCodes="ALL"/> 
<r:proxyByDefault action="true" /> 
<r:allowRegistrationBeforeUserServices action="true" /> 

<r:splScript> 
    <![CDATA[ 

callId = GetHeaderValues("Call-ID"); 
cseq = GetHeaderValues("CSeq"); 
content = ""; 
sstate = GetHeaderValues("subscription-state"); 
xevent = GetHeaderValues("Event"); 
xdir = GetHeaderValues("Direction"); 
xexp = GetHeaderValues("Session-Expires"); 
referto = GetHeaderValues("Refer-To"); 

if (sipRequest) 
{ 
    if (sipRequest.Method == "INVITE") { 
     if (ContainsString(sipRequest.Content, "m=audio", true)) { 
      content = "audio"; 
     } 
     else if (ContainsString(sipRequest.Content, "m=video", true)) { 
      content = "video"; 
     } 
     else if (ContainsString(sipRequest.Content, "m=message", true)) { 
      content = "message"; 
     } 
     else if (ContainsString(sipRequest.Content, "m=application", true)) { 
      content = "application"; 
     } 
     else { 
      content = "unknown"; 
     } 

    } 
    else if (sipRequest.Method == "NOTIFY" || sipRequest.Method == "BENOTIFY") { 
     content = sipRequest.Content; 
    } 


    DispatchNotification("OnRequest", sipRequest.Method, sipMessage.From, sipMessage.To, callId, cseq, content, xdir, xevent, sstate, xexp, referto); 
    if (sipRequest) {  
     ProxyRequest(); 
    } 
} 
else if(sipResponse) { 
    DispatchNotification("OnResponse", sipResponse.StatusCode, sipResponse.StatusReasonPhrase, sipMessage.From, sipMessage.To, callId, cseq, content, xdir, xevent, sstate, xexp, referto); 
    ProxyResponse(); 
} 
]]></r:splScript> 
</r:applicationManifest> 

Я получаю следующее ErrorMessage в Eventlog на Lync Front End сервера: Lync Server приложение MSPL выполнение скрипта прервано из-за ошибки

Application Uri на 'http://www.company.no/LyncServerFilter', в строке 60 Ошибка: 0x80070057 - неправильный параметр

Дополнительная информация: ProxyRequest действительна только для sipRequest

Line 60, где я называю ProxyRequest:

if (sipRequest) {  
ProxyRequest(); 
} 

Вопросы:

  1. Почему ErrorMessage говорят, что ProxyRequest действительна только для sipRequest? Я проверяю, что это sipMessage правильно?
  2. Могу ли я удалить свой вызов в ProxyRequest(), поскольку я установил proxyByDefault = true? Метод DistpathNotification «обрабатывает» метод (проглатывает его), или будет ли сообщение проксировано по умолчанию? Код «работает», когда я удалить вызов ProxyRequest(), но я не уверен, что последствия ...

ответ

1

метод ProxyRequest принимает аргумент Ури, поэтому вы получаете сообщение об ошибке компиляции.

Таким образом, вы должны называть это нравится:

ProxyRequest(""); // send to the URI specified in the request itself 

Удаление его ЭФФЕКТИВНОСТЬ делает то же самое, что и в вашей установке proxyByDefault быть установлен верно:

If true, the server automatically proxies any messages that are not handled by the application. If false, the message is dropped and applications that follow this application in the application execution order will not receive it. The default value is true.

В качестве побочного сведению, вам может использовать compilespl.exe, который входит в состав пакета Lync Server SDK, чтобы проверить правильность вашего сценария MSPL, прежде чем пытаться запустить его на сервере lync.

Отметьте это link в 'Скомпилируйте приложение MSPL отдельно'.

+0

Я не думаю, что это ошибка компиляции, потому что я не получаю ошибок при вызове Manifest.Compile ("mymanifest.am")? Я исправил это, удалив вызовы ProxyRequest() и ProxyResponse(), поскольку proxyByDefault делает то же самое, что и вы сказали :-) Но я считаю, что это работает только с DispatchNotification, а не Dispatch()? – Thomas

+0

Я просто попробовал, и ты прав! Тогда я не знаю. Я бы предположил, что это разница версий сервера Lync? Я не уверен, что DispatchNotificiation/Dispatch имеет к этому какое-то отношение. Предполагается, что с Dispatch вы проксируете запрос/ответ самостоятельно в управляемом коде, но если вы, возможно, не вернетесь к скрипту, чтобы это сделать? Поскольку DispatchNotificiation не виснет сценарий, все равно ответственность за скрипты за прокси-запрос запроса/ответа. –