Beispiel #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MediaServicesClassFactory" /> class.
        /// </summary>
        /// <param name="azureMediaServicesEndpoint">The Windows Azure Media Services endpoint to use.</param>
        /// <param name="dataServiceAdapter">The data service adapter.</param>
        /// <param name="serviceVersionAdapter">The service version adapter.</param>
        /// <param name="mediaContext">The <seealso cref="CloudMediaContext" /> instance.</param>
        /// <param name="userAgentAdapter">The user agent request adapter</param>
        public AzureMediaServicesClassFactory(Uri azureMediaServicesEndpoint, OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter serviceVersionAdapter, MediaContextBase mediaContext, UserAgentAdapter userAgentAdapter)
        {
            this._dataServiceAdapter    = dataServiceAdapter;
            this._serviceVersionAdapter = serviceVersionAdapter;
            this._mediaContext          = mediaContext;
            _userAgentAdapter           = userAgentAdapter;
            var clientRequestIdAdapter = new ClientRequestIdAdapter();

            string cacheKey = string.Format(
                "{0},{1}",
                mediaContext.Credentials.ClientId,
                azureMediaServicesEndpoint.ToString());

            this._azureMediaServicesEndpoint = _endpointCache.GetOrAdd(
                cacheKey,
                () => GetAccountApiEndpoint(this._dataServiceAdapter, this._serviceVersionAdapter, azureMediaServicesEndpoint, userAgentAdapter, clientRequestIdAdapter),
                () => mediaContext.Credentials.TokenExpiration);
        }
Beispiel #2
0
        public void ClientRequestIdPresentInWebRequestAndValidGuid()
        {
            var mock    = new MockRepository(MockBehavior.Loose);
            var request = mock.Create <HttpWebRequest>();
            var headers = new WebHeaderCollection();

            request.SetupProperty(c => c.Headers, headers);
            ClientRequestIdAdapter adapter = new ClientRequestIdAdapter();

            adapter.AddClientRequestId(request.Object);
            Assert.AreEqual(1, request.Object.Headers.Count);
            string xMsClientRequestId = "x-ms-client-request-id";

            Assert.IsNotNull(request.Object.Headers[xMsClientRequestId]);
            Guid guid;

            Assert.IsTrue(Guid.TryParse(request.Object.Headers[xMsClientRequestId], out guid));
        }
Beispiel #3
0
        /// <summary>
        /// Creates a data service context.
        /// </summary>
        /// <returns>The new DataServiceContext instance.</returns>
        public override IMediaDataServiceContext CreateDataServiceContext()
        {
            DataServiceContext dataContext = new DataServiceContext(_azureMediaServicesEndpoint, DataServiceProtocolVersion.V3)
            {
                IgnoreMissingProperties         = true,
                IgnoreResourceNotFoundException = true,
                MergeOption = MergeOption.PreserveChanges,
            };

            var clientRequestIdAdapter = new ClientRequestIdAdapter();

            this._dataServiceAdapter.Adapt(dataContext);
            this._serviceVersionAdapter.Adapt(dataContext);
            this._userAgentAdapter.Adapt(dataContext);
            clientRequestIdAdapter.Adapt(dataContext);

            dataContext.ReadingEntity += this.OnReadingEntity;
            var queryRetryPolicy = GetQueryRetryPolicy(null);
            var context          = new MediaDataServiceContext(dataContext, queryRetryPolicy, clientRequestIdAdapter);

            queryRetryPolicy.RetryPolicyAdapter = context;
            return(context);
        }
Beispiel #4
0
        /// <summary>
        /// Creates instance of <see cref="IMediaDataServiceContext"/> with contains additional applyed <see cref="IDataServiceContextAdapter"/> adapters
        /// </summary>
        /// <param name="adapters"></param>
        /// <returns><see cref="IMediaDataServiceContext"/></returns>
        public override IMediaDataServiceContext CreateDataServiceContext(IEnumerable <IDataServiceContextAdapter> adapters)
        {
            DataServiceContext dataContext = new DataServiceContext(_azureMediaServicesEndpoint, DataServiceProtocolVersion.V3)
            {
                IgnoreMissingProperties         = true,
                IgnoreResourceNotFoundException = true,
                MergeOption = MergeOption.PreserveChanges,
            };

            List <IDataServiceContextAdapter> dataServiceContextAdapters = GetDefaultDataContextAdapters().ToList();

            dataServiceContextAdapters.AddRange(adapters.ToList());
            dataServiceContextAdapters.ForEach(c => c.Adapt(dataContext));

            ClientRequestIdAdapter clientRequestIdAdapter = dataServiceContextAdapters.FirstOrDefault(c => c is ClientRequestIdAdapter) as ClientRequestIdAdapter;

            dataContext.ReadingEntity += OnReadingEntity;
            var queryRetryPolicy = GetQueryRetryPolicy(null);
            var context          = new MediaDataServiceContext(dataContext, queryRetryPolicy, clientRequestIdAdapter);

            queryRetryPolicy.RetryPolicyAdapter = context;
            return(context);
        }
Beispiel #5
0
        private Uri GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter versionAdapter, Uri apiServer, UserAgentAdapter userAgentAdapter, ClientRequestIdAdapter clientRequestIdAdapter)
        {
            MediaRetryPolicy retryPolicy = new MediaRetryPolicy(
                GetWebRequestTransientErrorDetectionStrategy(),
                RetryStrategyFactory.DefaultStrategy());

            Uri apiEndpoint = null;

            retryPolicy.ExecuteAction(
                () =>
            {
                HttpWebRequest request    = (HttpWebRequest)WebRequest.Create(apiServer);
                request.AllowAutoRedirect = false;
                dataServiceAdapter.AddAccessTokenToRequest(request);
                versionAdapter.AddVersionToRequest(request);
                userAgentAdapter.AddUserAgentToRequest(request);
                clientRequestIdAdapter.AddClientRequestId(request);

                using (WebResponse response = request.GetResponse())
                {
                    apiEndpoint = GetAccountApiEndpointFromResponse(response);
                }
            }
                );

            return(apiEndpoint);
        }
Beispiel #6
0
        /// <summary>
        /// Returns IEnumerable of type <see cref="IDataServiceContextAdapter"/> which applied by default for each request
        /// </summary>
        /// <returns></returns>
        public override IEnumerable <IDataServiceContextAdapter> GetDefaultDataContextAdapters()
        {
            var clientRequestIdAdapter = new ClientRequestIdAdapter();

            return(new IDataServiceContextAdapter[] { _dataServiceAdapter, _serviceVersionAdapter, _userAgentAdapter, clientRequestIdAdapter });
        }
 public MediaDataServiceContext(DataServiceContext dataContext, MediaRetryPolicy queryRetryPolicy, ClientRequestIdAdapter clientRequestAdapter)
 {
     _dataContext            = dataContext;
     _queryRetryPolicy       = queryRetryPolicy;
     _clientRequestIdAdapter = clientRequestAdapter;
 }