0

Lync 2013 サーバーで実行され、MSPL を使用する C# マネージ アプリケーションがあります。MSPL からのすべての呼び出しをアプリケーションにルーティングし、そこで処理します。Lync から Lync への通話は正常に機能し、toヘッダーの形式はsip:user@domain.com. ただし、ネットワークの外部 (携帯電話などの非 lync) から Lyncuser の職場の電話への通話が開始されると、Uri はsip:+12341234@domain.com;user=phone(sip:[workphone]@domain) のようになります。この文字列を Presence Retrieval 関数に渡しても機能しません。

var sips = new string[] { phone }; // The "To" number
presenceService.BeginPresenceQuery(sips, categories, null, null, null);

これは常に空の結果を返します。最初に電話番号に関連付けられたユーザーを取得してその存在を取得するにはどうすればよいですか?

4

2 に答える 2

0

私はこのように解決しました:

public static UserObject FindContactBySip(string sip)
{
    return UserList.FirstOrDefault(u => u.HasSip(sip));
}

private static void InitFindUsersInAD()
{
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
    var user = new UserPrincipal(ctx);
    user.Name = "*";
    var searcher = new PrincipalSearcher(user);
    var result = searcher.FindAll();

    var sipList = new List<string>();
    UserList = new List<UserObject>();

    foreach (var res in result)
    {
        var underlying = (DirectoryEntry)res.GetUnderlyingObject();
        string email = string.Empty, phone = string.Empty, policies = string.Empty;

        foreach (var keyval in underlying.Properties.Values)
        {
            var kv = keyval as System.DirectoryServices.PropertyValueCollection;
            if (kv != null && kv.Value is string)
            {
                if (kv.PropertyName.Equals("msRTCSIP-PrimaryUserAddress"))
                {
                    email = (kv.Value ?? string.Empty).ToString();
                }
                else if (kv.PropertyName.Equals("msRTCSIP-Line"))
                {
                    phone = (kv.Value ?? string.Empty).ToString();
                }
                else if (kv.PropertyName.Equals("msRTCSIP-UserPolicies"))
                {
                    policies = (kv.Value ?? string.Empty).ToString();
                }
            }
        }

        if (!string.IsNullOrEmpty(phone) && !string.IsNullOrEmpty(email))
        {
            var userobj = new UserObject(email, phone, policies);
            UserList.Add(userobj);
        }
    }
}

まずUserList、AD から (List // カスタム クラス) を初期化します。次にFindContactBySip、提供された SIP がユーザーの電子メールまたは電話と等しいかどうかを呼び出して確認します。

于 2014-11-06T07:32:52.997 に答える