Я пишу приложение 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();
}
Вопросы:
- Почему ErrorMessage говорят, что ProxyRequest действительна только для sipRequest? Я проверяю, что это sipMessage правильно?
- Могу ли я удалить свой вызов в ProxyRequest(), поскольку я установил proxyByDefault = true? Метод DistpathNotification «обрабатывает» метод (проглатывает его), или будет ли сообщение проксировано по умолчанию? Код «работает», когда я удалить вызов ProxyRequest(), но я не уверен, что последствия ...
Я не думаю, что это ошибка компиляции, потому что я не получаю ошибок при вызове Manifest.Compile ("mymanifest.am")? Я исправил это, удалив вызовы ProxyRequest() и ProxyResponse(), поскольку proxyByDefault делает то же самое, что и вы сказали :-) Но я считаю, что это работает только с DispatchNotification, а не Dispatch()? – Thomas
Я просто попробовал, и ты прав! Тогда я не знаю. Я бы предположил, что это разница версий сервера Lync? Я не уверен, что DispatchNotificiation/Dispatch имеет к этому какое-то отношение. Предполагается, что с Dispatch вы проксируете запрос/ответ самостоятельно в управляемом коде, но если вы, возможно, не вернетесь к скрипту, чтобы это сделать? Поскольку DispatchNotificiation не виснет сценарий, все равно ответственность за скрипты за прокси-запрос запроса/ответа. –