C# 使用UCMA 2.0在OCS2007 R2中发布自定义状态信息(在MOC中可见)

C# 使用UCMA 2.0在OCS2007 R2中发布自定义状态信息(在MOC中可见),c#,xml,ocs,user-presence,ucma2.0,C#,Xml,Ocs,User Presence,Ucma2.0,我正在编写一个UCMA 2.0应用程序,它通过一个“UserEndpoint”连接到OCS。我希望能够设置一个自定义的状态信息以及我的可用性 我在这一过程中遇到了一些问题,花了很多时间在谷歌上搜索和试用了一些文章,大多数人似乎都在说同样的话(包括微软自己): 使用XML将“userState”活动设置为自定义并包含消息,然后通过端点的“LocalOwnerPresence.BeginPublishPresence”方法将其发布到自定义类别中 当我这样做时,我没有从OCS那里得到任何错误(请参见下

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

我在这一过程中遇到了一些问题,花了很多时间在谷歌上搜索和试用了一些文章,大多数人似乎都在说同样的话(包括微软自己):

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

当我这样做时,我没有从OCS那里得到任何错误(请参见下面的XML示例),但是查看Office Communicator(MOC)中的状态,所涉及的用户仍然显示为脱机状态。我发现发布“machineState”也意味着我们在MOC中看到了一些状态图标,但遗憾的是,我无法让自定义活动消息正常工作

更多的阅读让我对雁行追逐感兴趣,比如OCS DB中需要运行的存储过程(听起来更像是添加全新的状态类别,而不仅仅是向现有状态添加自定义消息)。“在线”一天后,我有点筋疲力尽了

任何帮助或指出任何问题都将不胜感激!我已经包括了一些我在阅读本文时使用的网站:

出席简介:

发布状态:

状态+自定义消息:

机器状态思想:

状态模式文档:

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

希望我没有遗漏任何内容,如果您认为遗漏了什么,请发表评论

干杯
皮特

好吧,这有点尴尬,因为我已经设法解决了这个问题——但我想我可以把一些责任归咎于微软:

似乎您必须在自定义消息上指定LCID(区域性信息ID),以便MOC获取它,遗憾的是,MSDN上的文档似乎认为它不是必需的(可能不是,但要使事情正常运行,它是必需的)

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

这意味着我必须多次添加自定义消息,尽管对于使用MOC的收件人可能所在的每个潜在区域设置,这似乎不是最好的方法(例如,请参见下面的内容)

string userStateXmlFormat=“\n”
+“{0}\n”
+“\n”
+“{1}\n”
+“{1}\n”
+“\n”
+ "";

不管怎么说,我希望这能帮助其他想要所有文化的通用信息的人,如果你想创建类似的东西,也许上面的链接也很有用。

好吧,这有点尴尬,因为我已经设法解决了这个问题-但我想我可以把一些责任归咎于MS:

似乎您必须在自定义消息上指定LCID(区域性信息ID),以便MOC获取它,遗憾的是,MSDN上的文档似乎认为它不是必需的(可能不是,但要使事情正常运行,它是必需的)

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

这意味着我必须多次添加自定义消息,尽管对于使用MOC的收件人可能所在的每个潜在区域设置,这似乎不是最好的方法(例如,请参见下面的内容)

string userStateXmlFormat=“\n”
+“{0}\n”
+“\n”
+“{1}\n”
+“{1}\n”
+“\n”
+ "";
不管怎样,我希望这能帮助其他想要所有文化的通用信息的人,如果你想创建类似的东西,也许上面的链接也是有用的

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>";
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);
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>";