我正在写一个UCMA2.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 (字符串),我用一个自定义消息和一个可用性整数值(“string.Format message”和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);希望我没有遗漏任何东西,如果你认为有遗漏的地方,请评论!
干杯皮特
发布于 2011-06-21 17:14:52
好吧,这有点尴尬,因为我已经设法解决了这个问题--但我想我可以把一些责任归咎于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>";无论如何,我希望这能帮助那些想要一个适用于所有文化的通用信息的人,如果你想创建类似的东西,上面的链接可能也是有用的读物。
https://stackoverflow.com/questions/6414367
复制相似问题