PresenceView是使用手动配置的应用程序端点创建的。我已经为它提供了三个目标,这些目标都报告“已订阅”。但我只收到第一个通知。之后,没有任何反应。民意调查也是如此。第一次通知后,NotificationRecieved事件未触发。 Lync事件日志显示没有错误,也没有引发任何操作。
我的设置是一个虚拟环境,其中包含DC,Lync Server和Developer计算机,它们也充当应用程序池。一切都很好。
以下是我的代码的一些示例。我的解决方案包括两个项目:一个小型控制台应用程序和一个带有lync代码的项目。它基于UCMA代码示例中的SubscribePresenceView示例解决方案,它可以很好地更新状态,尽管它使用的是用户端点。
public void Run()
{
_helper = new Helper(new ConsoleLogger());
_applicationEndpoint = _helper.CreateApplicationEndpoint();
var viewSettings = new RemotePresenceViewSettings();
viewSettings.SubscriptionMode = RemotePresenceViewSubscriptionMode.Default;
_presenceView = new RemotePresenceView(_applicationEndpoint, viewSettings);
List<RemotePresentitySubscriptionTarget> targets = new List<RemotePresentitySubscriptionTarget>();
targets.Add(new RemotePresentitySubscriptionTarget("sip:mortenl@mupersan.local"));
targets.Add(new RemotePresentitySubscriptionTarget("sip:finnl@mupersan.local"));
targets.Add(new RemotePresentitySubscriptionTarget("sip:andersl@mupersan.local"));
this.WireUpHandlersForView(_presenceView);
_presenceView.StartSubscribingToPresentities(targets);
}
处理通知委托方法:
private void RemotePresenceView_NotificationReceived(object sender, RemotePresentitiesNotificationEventArgs e)
{
// A RemotePresentityNotification will contain all the
// categories for one user; Notifications can contain notifications
// for multiple users.
foreach (RemotePresentityNotification notification in e.Notifications)
{
Console.WriteLine("\nReceived a Notification for user "+ notification.PresentityUri + ".");
// If a category on notification is null, the category
// was not present in the notification. This means there were no
// changes in that category.
if (notification.AggregatedPresenceState != null)
{
Console.WriteLine("Aggregate State = " + notification.AggregatedPresenceState.Availability + ".");
}
if (notification.PersonalNote != null)
{
Console.WriteLine("PersonalNote: " + notification.PersonalNote.Message + ".");
}
if (notification.ContactCard != null)
{
// A ContactCard contains many properties; only display
// some.
ContactCard contactCard = notification.ContactCard;
Console.WriteLine("ContactCard Company: " + contactCard.Company + ".");
Console.WriteLine("ContactCard DisplayName: " + contactCard.DisplayName + ".");
Console.WriteLine("ContactCard EmailAddress: " + contactCard.EmailAddress + ".");
}
}
}
如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
从来没有找到解决方案,所以我继续使用UserEndPoint,这很好用。
答案 1 :(得分:1)
我现在意识到这已经很老了,但我最近遇到了完全相同的问题,所以可能值得回答。
在我的情况下,原因是服务器无法建立与应用程序端点的连接。我在这里看不到代码有什么问题,所以很可能是两台机器之间的防火墙或路由问题。
在设置应用程序端点时,您需要定义一个端口,并且该端口需要在托管应用程序端点的计算机上可访问(在本例中为您的开发人员计算机)。
对于用户端点,您不应该打开端口,因此服务器只会在客户端与服务器的连接上发送通知,这就是为什么会这样做。