Não é possível conectar ao servidor de comunicação do Office por meio da API de comunicação unificada
Pergunta
Estou tentando me conectar ao servidor de comunicação do Office usando a API gerenciada de comunicações unificadas. Eu tentei meu usuário e um novo usuário ativado para OCs. Ambas as contas podem fazer login com sucesso no cliente do Comunicador do Office, mas falhar usando a API. Ao criar a credencial da rede, se eu passar no nome de usuário no nome do domínio nome de usuário, recebo este erro:
SupportedAuthenticationProtocols=Ntlm, Kerberos
Realm=SIP Communications Service
FailureReason=InvalidCredentials
ErrorCode=-2146893044
Microsoft.Rtc.Signaling.AuthenticationException: The log on was denied. Check that the proper credentials are being used and the account is active. ---> Microsoft.Rtc.Internal.Sip.AuthException: NegotiateSecurityAssociation failed, error: - 2146893044
Se eu deixar de lado o domínio no nome de usuário, este erro:
ResponseCode=404 ResponseText=Not Found
DiagnosticInformation=ErrorCode=4005,Source=OCS.mydomain.com,Reason=Destination URI either not enabled for SIP or does not exist
Solução
Acontece que isso foi uma supervisão da minha parte. Nosso domínio de anúncio e domínio do comunicador são diferentes, eu assumi que eles eram iguais.
A credencial da rede é o nome de usuário do domínio, e o endereço do SIP deveria ter sido sip: username@companyname.com, eu estava usando o sip: username@domain.com.
Outras dicas
Duas coisas a serem observadas:
- O nome de usuário não deve conter o domínio. Deve haver uma propriedade de domínio separada do NetworkCredential que você deve usar.
- Você também precisa passar o URI do usuário - por exemplo:
//Initialize and register the endpoint, using the credentials of the user the application will be acting as.
UserEndpointSettings userEndpointSettings = new UserEndpointSettings(_userURI, _userServer);
userEndpointSettings.Credential = _credential;
_userEndpoint = new UserEndpoint(_collabPlatform, userEndpointSettings);
_userEndpoint.BeginEstablish(EndEndpointEstablish, _userEndpoint);