コード例 #1
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));
 }
        /// <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);
        }
        /// <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;
        }
        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;
        }
 /// <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 };
 }