private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, LiveDevice device) { var environment = DiscoverEnvironmentInternal(issuerUri); var request = new DeviceRegistrationRequest(applicationId, device); var url = string.Format(CultureInfo.InvariantCulture, LiveIdConstants.RegistrationEndpointUriFormat, environment.HostName); var response = ExecuteRegistrationRequest(url, request); if (!response.IsSuccess) { var throwException = true; if (DeviceRegistrationErrorCode.DeviceAlreadyExists == response.Error.RegistrationErrorCode) { if (!PersistToFile) { return(device.User.ToClientCredentials()); } if (PersistIfDeviceAlreadyExists) { throwException = false; } } if (throwException) { throw new DeviceRegistrationFailedException(response.Error.RegistrationErrorCode, response.ErrorSubCode); } } if (PersistToFile || PersistIfDeviceAlreadyExists) { WriteDevice(environment, device); } return(device.User.ToClientCredentials()); }
private static DeviceRegistrationResponse ExecuteRegistrationRequest(string url, DeviceRegistrationRequest registrationRequest) { var request = WebRequest.Create(url); request.ContentType = "application/soap+xml; charset=UTF-8"; request.Method = "POST"; request.Timeout = 180000; // ToDo: async using (var stream = request.GetRequestStream()) { Serialize(stream, registrationRequest); } try { using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { return(Deserialize <DeviceRegistrationResponse>("Deserializing Registration Response", stream)); } } catch (WebException ex) { System.Diagnostics.Trace.TraceError("Microsoft account Device Registration Failed (HTTP Code: {0}): {1}", ex.Status, ex.Message); if (ex.Response != null) { using (var stream = ex.Response.GetResponseStream()) { return(Deserialize <DeviceRegistrationResponse>("Deserializing Failed Registration Response", stream)); } } throw; } }