2017-03-07 1 views
0

Ich habe eine API (MVC) erstellt und hostet es in Azure-Server. Die API empfängt jeweils 1 Bild und 1 Text. Es funktioniert ordnungsgemäß für den Einzelanruf oder den ersten Anruf, aber nach bestimmten Nummern von API-Aufruf unter Fehler.Azure Server wirft Ausnahme nach bestimmten Nummern von API-Aufruf

Nach Microsoft.Azure.DocumentDB Installation:

Fehler:

=== Pre-bind state information === LOG: DisplayName = Microsoft.Azure.Documents.Client, Version=1.11.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Fully-specified) LOG: Appbase = file:///D:/Project/002 MVC API/Cherish/API/Cherish.Api/ LOG: Initial PrivatePath = D:\Project\002 MVC API\Cherish\API\Cherish.Api\bin Calling assembly : Cherish.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in default load context. LOG: Using application configuration file: D:\Project\002 MVC API\Cherish\API\Cherish.Api\web.config LOG: Using host configuration file: C:\Users\Yudiz\Documents\IISExpress\config\aspnet.config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. LOG: Post-policy reference: Microsoft.Azure.Documents.Client, Version=1.11.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG: Attempting download of new URL file:///C:/Users/Yudiz/AppData/Local/Temp/Temporary ASP.NET Files/vs/7b6de7f7/4f48effb/Microsoft.Azure.Documents.Client.DLL. LOG: Attempting download of new URL file:///C:/Users/Yudiz/AppData/Local/Temp/Temporary ASP.NET Files/vs/7b6de7f7/4f48effb/Microsoft.Azure.Documents.Client/Microsoft.Azure.Documents.Client.DLL. LOG: Attempting download of new URL file:///D:/Project/002 MVC API/Cherish/API/Cherish.Api/bin/Microsoft.Azure.Documents.Client.DLL. WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Hier ist mein Code-Schnipsel:

var blobHelper = new BlobHelper(); 
var response = new UploadMediaResponse(); 
for (var i = 0; i<provider.Files.Count; i++) 
{ 
    Guid itemId; 
    var fileData = await provider.Files[i].ReadAsByteArrayAsync(); 
    if (mediaType == MediaType.Thumbnail) 
    { 
     // MediaId is mandatory for Audio & Video media 
     if (String.IsNullOrWhiteSpace(provider.FormData["mediaId"])) 
     // ReSharper disable once NotResolvedInText 
      return ErrorResponse(new ArgumentNullException("mediaId", "MediaId was not provided")); 
     itemId = new Guid(provider.FormData["mediaId"]); 
     await blobHelper.Upload(mediaType, accountId, itemId, fileData, timelineEvent.ChildId); 
     var mediaItem = timelineEvent.Media.Single(m => m.Id == itemId); 
     mediaItem.HasThumbnail = true; 
     mediaItem.LastUpdated = DateTime.UtcNow; 
     await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink); 
    } 
    else 
    { 
     itemId = await blobHelper.Upload(mediaType, accountId, fileData, timelineEvent.ChildId); 
     var mediaItem = new TimelineMediaItem 
     { 
      Id = itemId, 
      Available = true, 
      FileSize = fileData.Length, 
      Removed = false, 
      Type = mediaType.ToUpper(), 
      TaggedChildren = new List<TaggedChild>(), 
      Created = DateTime.UtcNow, 
      LastUpdated = DateTime.UtcNow 
     }; 
     if (fileLengthsRequired) 
      mediaItem.Length = fileLengths[i]; 
     timelineEvent.Media.Add(mediaItem); 
     await timelineEventRepository.UpdateAsync(timelineEvent, entityDoc.SelfLink); 
    } 
    response.MediaIds.Add(itemId); 
} 

Erklärung für DocumentClient:

public DocumentRepository() 
{ 
    Client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["DocumentDbEndpointUrl"]), ConfigurationManager.AppSettings["DocumentDbAuthKey"]); 
    DatabaseName = ConfigurationManager.AppSettings["DocumentDbDatabaseName"]; 
    PageSize = Int16.Parse(ConfigurationManager.AppSettings["DefaultPageSize"]); 
    var _database = ReadOrCreateDatabase(); 
    var collection = InitialiseCollection(_database.SelfLink, EntityName); 
    DocumentsLink = collection.DocumentsLink; 
    SelfLink = collection.SelfLink; 
} 
Hier 10

ist mein Fehler:

Error String :=> Optional({"Message":"An error has occurred.","ExceptionMessage":"One or more errors occurred.","ExceptionType":"System.AggregateException","StackTrace":" at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n at System.Threading.Tasks.Task1.GetResultCore(Boolean
waitCompletionNotification)\r\n at
System.Threading.Tasks.Task1.get_Result()\r\n at Microsoft.Azure.Documents.Linq.DocumentQuery1.GetEnumerator()\r\n

at System.Linq.Buffer1..ctor(IEnumerable1 source)\r\n at
System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source)\r\n at Cherish.Domain.Repositories.Implementation.DocumentRepository1.ReadOrCreateDatabase()\r\n at
Cherish.Domain.Repositories.Implementation.DocumentRepository1..ctor()\r\n at Cherish.Api.Helpers.BlobHelper.AccountHasEnoughStorageCapacity(Guid accountId, Int32 fileSize)\r\n at Cherish.Api.Helpers.BlobHelper.d__4.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Cherish.Api.Helpers.BlobHelper.d__3.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)\r\n at Cherish.Api.Controllers.TimelineController.d__15.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Cherish.Api.Controllers.TimelineController.d__11.MoveNext()","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"An error occurred while sending the request.","ExceptionType":"System.Net.Http.HttpRequestException","StackTrace":" at Microsoft.Azure.Documents.BackoffRetryUtility1.d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown
---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task)\r\n at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at
Microsoft.Azure.Documents.Linq.DocumentQueryExecutionContext.d__7.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown
---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task)\r\n at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at
Microsoft.Azure.Documents.Linq.DocumentQuery1.d__10.MoveNext()","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Unable to connect to the remote server","ExceptionType":"System.Net.WebException","StackTrace":" at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)\r\n at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"An attempt was made to access a socket in a way forbidden by its access permissions","ExceptionType":"System.Net.Sockets.SocketException","StackTrace":" at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)\r\n at System.Net.Sockets.Socket.InternalBind(EndPoint localEP)\r\n at System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext, AsyncCallback callback, Object state)\r\n at System.Net.Sockets.Socket.UnsafeBeginConnect(EndPoint remoteEP, AsyncCallback callback, Object state)\r\n at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)"}}}})

danken Ihnen im Voraus.

+0

Verwenden Sie Azure DocumentDB? Ich habe ein Problem mit dem ähnlichen Fehler gefunden, auf den Sie verweisen können (https://social.msdn.microsoft.com/Forums/en-US/0ddee231-d8f3-451f-8c94-954205ba02fc/azure-documentdb-error -unable-to-the-remote-Serveran-Versuch-wurde-zu-Access-a-Socket gemacht? Forum = AzureDocumentDB). Würden Sie uns bitte Ihr Kern-Code-Snippet zur Verfügung stellen, um dieses Problem zu finden? –

+0

@ Bruce-MSFT Ja, ich benutze DocumentDB und ich habe die Frage mit dem Code aktualisiert. –

+0

@ Bruce-MSFT: Hast du die Chance, die obige Frage zu überprüfen, bitte? –

Antwort

1

Je nach Ihrem Problem ging ich davon aus, dass nach bestimmten Nummern des API-Aufrufs Verbindungsprobleme zwischen Ihrem Client- und Documentdb-Endpunkt bestehen. Sie könnten versuchen, eine statische Instanz DocumentClient und fügen Sie die Wiederholungspolitik Ihre DocumentRepository Klasse zu erstellen, wie folgt:

public class DocumentRepository 
{ 
    private static readonly DocumentClient _client; 
    static DocumentRepository() 
    { 
     var connectionPolicy = new ConnectionPolicy 
     { 
      RetryOptions = new RetryOptions() 
      { 
       MaxRetryAttemptsOnThrottledRequests = 5, 
       MaxRetryWaitTimeInSeconds = 5 
      } 
     }; 
     _client = new DocumentClient(
      new Uri(ConfigurationManager.AppSettings["DocumentDbEndpointUrl"]), 
      ConfigurationManager.AppSettings["DocumentDbAuthKey"], 
      connectionPolicy); 
    } 

    public DocumentRepository() 
    { 
     DatabaseName = ConfigurationManager.AppSettings["DocumentDbDatabaseName"]; 
     PageSize = Int16.Parse(ConfigurationManager.AppSettings["DefaultPageSize"]); 
     var _database = ReadOrCreateDatabase(); 
     var collection = InitialiseCollection(_database.SelfLink, EntityName); 
     DocumentsLink = collection.DocumentsLink; 
     SelfLink = collection.SelfLink; 
    } 

    public async Task UpdateAsync(TimelineEvent timelineEvent, string selfLink) 
    { 
     //TODO: 
     await _client.UpsertDocumentAsync("{documentCollectionUri}", timelineEvent); 
    } 
} 

Zusätzlich gibt es eine offizielle blog sprechen über Performance-Tipps für Azure DocumentDB Sie darauf verweisen können.

+0

Ich erhalte einen Fehler bei der Verwendung von 'RetryOptions':' 'ConnectionPolicy' enthält keine Definition für 'RetryOptions' ' –

+0

Ich habe [Microsoft Azure DocumentDB Client Bibliothek 1.11.1] (https://www.nuget.org/packages /Microsoft.Azure.DocumentDB) in meiner Entwicklung könnten Sie versuchen, die Version Ihrer Client-Bibliothek zu überprüfen. Irgendwelche Bedenken, fühlen Sie sich frei, mich wissen zu lassen. –

+0

Ich benutze 'Microsoft.Azure.Documents.Client' –