1

我正在编写一个 UCMA 2.0 应用程序,它通过“UserEndpoint”连接到 OCS。我希望能够设置自定义状态消息以及我的可用性!

我在此过程中遇到了一些问题,并花了很多时间谷歌搜索并尝试了几篇文章,大多数似乎都在说同样的事情(包括 MS 自己):

使用 XML 将“userState”活动设置为自定义并包含消息,然后通过端点的“LocalOwnerPresence.BeginPublishPresence”方法将其发布到自定义类别中。

执行此操作时,我没有从 OCS 收到任何错误(请参阅下面的 XML 示例),但是查看 Office Communicator (MOC) 中的存在问题的用户继续显示为脱机。我发现同时发布“machineState”意味着我们在 MOC 中看到了一些存在图标,但是唉,我无法让自定义活动消息正常工作。

更多的阅读让我大吃一惊,例如需要运行 OCS DB 中的存储过程以允许这样做(听起来更像是添加全新的存在类别,而不仅仅是向现有状态添加自定义消息)。经过一天的“在线”后,我有点受不了了。

任何帮助或指出任何陷阱将不胜感激!我在阅读此内容时包含了一些我使用的网站:

存在介绍: http: //msdn.microsoft.com/en-us/library/dd253506 (v=office.13).aspx

发布存在: http: //msdn.microsoft.com/en-us/library/dd253494 (v=office.13).aspx

存在 + 自定义消息:http: //blogs.claritycon.com/blog/2009/03/04/how-to-publish-presence-using-ucma-v2-0-and-have-a-clever-communicator-status /

机器状态的想法:http ://social.msdn.microsoft.com/Forums/en-US/ucmanagedsdk/thread/d3bd3569-66c0-4b52-86f0-900d2fb6d22e/

存在模式文档: http: //msdn.microsoft.com/en-us/library/dd941536 (v=office.13).aspx

这是我在我的代码中使用的 XML(字符串),即时我是字符串。使用自定义消息和可用性整数值(“测试消息”和 3500 为参数)格式化占位符。

string userStateXmlFormat = "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" manual=\"true\" xsi:type=\"userState\">\n"
            + "<availability>{0}</availability>\n"
                + "<activity>\n" 
                   + "<custom xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n" 
                + "</activity>\n"
            + "</state>";

这是进行格式化并尝试发布存在的 C#:

var machineStateXml = string.Format(machineStateXmlFormat, 3500);
var userStateXml = string.Format(userStateXmlFormat, 3500, "Test Message");
var machineState = new CustomPresenceCategory("state", machineStateXml);
var userState = new CustomPresenceCategory("state", userStateXml);                
PresenceCategory[] categoriesToPublish = new PresenceCategory[] { machineState, userState };
this.Endpoint.LocalOwnerPresence.BeginPublishPresence(categoriesToPublish, this.PublishPresenceCompleted, null);

希望我没有遗漏任何内容,如果您认为缺少某些内容,请发表评论!

干杯皮特

4

1 回答 1

1

好的,这有点令人尴尬,因为我已经设法解决了它 - 但我想我可以将一些责任归咎于 MS:

似乎您必须在自定义消息上指定 LCID(文化信息 ID)才能让 MOC 接收它,遗憾的是 MSDN 上的文档似乎认为它不是必需的(也许不是,但为了让事情正常工作它是)

http://msdn.microsoft.com/en-us/library/dd941468(v=office.13).aspx

LCID (int):表示位置 ID 的整数。选修的

这意味着我必须多次添加自定义消息,尽管对于使用 MOC 的收件人可能所在的每个潜在语言环境,这似乎不是最好的处理方式(例如,请参见下文)。

string userStateXmlFormat = "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" manual=\"true\" xsi:type=\"userState\">\n"
  + "<availability>{0}</availability>\n"
  + "<activity>\n" 
    + "<custom LCID=\"1033\" xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n"
    + "<custom LCID=\"2057\" xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n" 
  + "</activity>\n"
+ "</state>";

无论如何,我希望这可以帮助那些想要为所有文化提供通用信息的人,如果你想创建类似的东西,也许上面的链接也是有用的阅读。

于 2011-06-21T09:14:52.333 回答