17

Próbuję odczytać wiadomości z kolejki Azure ServiceBus stosując Azure WebJob ale i rzuca wyjątek:Azure WebJobs ServiceBus zwraca Wyjątek: znaleziono 2 żądań DNS w kontekście autoryzacji

Unhandled Exception: System.InvalidOperationException: Found 2 DNS claims in authorization context. 

mam ustawione poprawne ciągi połączenia o nazwie "AzureWebJobsServiceBus", "AzureWebJobsDashboard" i "AzureWebJobsStorage"

Kod WebJob Program został zaktualizowany do korzystania JobHostConfiguration:

class Program 
{ 
    static void Main() 
    { 
     var config = new JobHostConfiguration(); 
     config.UseServiceBus(); 

     var host = new JobHost(config); 
     host.RunAndBlock(); 
    } 
} 

a rzeczywista praca metoda

public class Functions 
{ 
    public async static Task ServiceBusResizeRequest(
     [ServiceBusTrigger("blah")] string message,    
     TextWriter log 
     ) 
    {    
     await log.WriteLineAsync("got message " + message); 
    } 

} 

mogę z powodzeniem tworzyć i zapisywać do kolejki za pośrednictwem osobnej aplikacji konsoli.

Ale kiedy uruchomię aplikację webjob, zgłasza ten wyjątek.

Wszelkie pomysły?

EDIT: Korzystanie .net 4.6.1

+0

Obniżenie od 4.6.1 do 4.6 .NET wydaje się uniknąć problemu z występuje. Zostawię to otwarte na dłużej, aby sprawdzić, czy ktoś ma odpowiedź na pytanie, dlaczego 4.6.1 nie powiedzie się. –

+2

Cóż, pakiety SDK WebJobs 4.5. wkrótce udostępnimy aktualizację przenoszącą się do wersji 4.6, ale może to być problem. – mathewc

+0

Pozdrawiam, dzięki. Nie zdawałem sobie sprawy, że cel dotyczy tylko 4.5. –

Odpowiedz

13

29 stycznia Microsoft wydała wersję 3.1.3 pakietu Nuget WindowsAzure.ServiceBus.

Od release notes:

• ogólne: Net 4.6.1+ kompatybilność fix. Naprawienie niestandardowego weryfikatora tożsamości DNS, abyśmy cześć wielu roszczeń DNS zwróconych przez WIF

Aktualizacja pakietu rozwiązała problem dla nas.

+3

wersja 3+ z WindowsAzure.ServiceBus zrywa SignalR https://github.com/SignalR/SignalR/issues/3548 –

1

Obniżenie od 4.6.1 do 4.6 .NET wydaje się zapobiec występowaniu tego problemu.

+1

Proszę, przeczytaj moją odpowiedź. –

32

Odpowiedź oznaczona jako rozwiązanie, nie jest rozwiązaniem, jest to nieudana robota. Rozwiązaniem używać go w .NET Framework 4.6.1 jest dodanie w bloku rutime w app.config:

<AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true" /> 

Przeczytaj ten artykuł Mitigation: X509CertificiateClaimSet.FindClaims Method

Bardzo WAŻNE teraz Azure webapps/WebJob itp., nie obsługuje 4.6.1 będę tu pamiętać, kiedy (powiedział 21 stycznia 2016 r.).

To oznacza, że ​​można rozwijać aplikacji internetowych z pracy 4.6.1, ale po naciśnięciu go Azure można zobaczyć wyjątki jak Job failed due to exit code -2146232576

+5

Miał ten sam problem. Z jakiegoś powodu to ustawienie AppContextSwitchOverrides w config nie pomogło, więc właśnie dodałem kod w konstruktorze AppContext.SetSwitch ("Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate", true); – Ben

+0

Być może masz plik kontekstowy w innym projekcie. Czy próbowałeś dodać ustawienie w app.config aplikacji, a także w kontekście projektu? –

+0

Mam projekt roli procesu roboczego Azure i próbowałem zastosować tę konfigurację do sekcji app.config . – Ben

1

Dziś wpadłem na tę sprawę i nie miałem pojęcia o tym. Ostatecznie zdecydowałem się uaktualnić wszystkie pakiety nuget Azure, których używam (w tym webjobs, servicebus ...) i BOOM! to działa.Mam nadzieję, że to pomoże, jeśli ktoś pracuje w tej kwestii w przyszłości

1

Jak podkreślono w this answer powyżej, fragment poniżej załatwia sprawę

<runtime> 
    ... 
    <AppContextSwitchOverrides value="Switch.System.DisableMultipleDNSEntriesInSANCertificate=true" /> 
    ... 
<runtime> 

ALE należy zachować ostrożność, aby dodać go do właściwej projektu w swoim rozwiązaniu! Dodaj go do projektu zawierającego kod Azure i referencje Azure.