Aracılığıyla paylaş


ASP.NET Core Blazor WebAssembly'yi barındırma ve dağıtma

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Bu makalede ASP.NET Core, Content Delivery Networks (CDN), dosya sunucuları ve GitHub Pages kullanılarak nasıl barındırılacağı ve dağıtılacağı Blazor WebAssembly açıklanmaktadır.

Barındırma modeliyleBlazor WebAssembly:

  • Uygulama Blazor , bağımlılıkları ve .NET çalışma zamanı paralel olarak tarayıcıya indirilir.
  • Uygulama doğrudan tarayıcı kullanıcı arabirimi iş parçacığında yürütülür.

Bu makale, uygulamanın statik bir barındırma web sunucusuna veya hizmetine yerleştirildiği Blazor dağıtım senaryosuyla ilgilidir; .NET, uygulamaya hizmet Blazor vermek için kullanılmaz. Bağımsız dağıtım bölümünde açıklanan bu strateji, bir uygulamayı IIS alt uygulaması olarak barındırmayla ilgili bilgileri içerir.

Aşağıdaki dağıtım stratejileri desteklenir:

  • Blazor uygulaması, bir ASP.NET Core uygulaması tarafından sunulur. ASP.NET Core ile barındırılan dağıtım bölümünde bu strateji ele alınmıştır.
  • Uygulama Blazor statik bir barındırma web sunucusuna veya hizmetine yerleştirilir; burada .NET, uygulamaya hizmet Blazor vermek için kullanılmaz. Bu strateji, bir Tek başına dağıtım bölümünde ele alınmıştır, bu bölümde bir Blazor WebAssembly uygulamasını IIS alt uygulaması olarak barındırma hakkında bilgiler bulunmaktadır.
  • ASP.NET Core uygulaması birden çok Blazor WebAssembly uygulama barındırıyor. Daha fazla bilgi için Birden çok barındırılan ASP.NET Core Blazor WebAssembly uygulamalarına bkz.

Alt alan adı ve IIS alt uygulama barındırma

Alt etki alanı barındırma, uygulamanın özel yapılandırılmasını gerektirmez. Uygulamayı bir alt etki alanında barındırmak için uygulamanın temel yolunu (<base> etiketini wwwroot/index.html içinde) yapılandırmanız gerekmez.

IIS alt uygulama barındırma, uygulama temel yolunu ayarlamanızı gerektirir. IIS alt uygulama barındırma hakkında daha fazla bilgi ve ek kılavuzlar için ilişkili bağlantılar için bkz ASP.NET Core'u Blazorbarındırma ve dağıtma.

Bazı mobil cihaz tarayıcıları için en büyük yığın boyutunu azaltma

İstemcide çalışan (Blazor Web App veya tek başına Blazor WebAssembly uygulamanın projesi) ve mobil cihaz tarayıcılarını, özellikle iOS'ta Safari'yi hedefleyen bir Blazor uygulama oluştururken, MSBuild özelliği EmccMaximumHeapSize kullanılarak uygulama için maksimum belleği azaltmak gerekebilir. Varsayılan değer 2.147.483.648 bayttır; bu değer çok büyük olabilir ve tarayıcı daha fazla bellek tahsis etmeyi başaramazsa, uygulama daha fazla bellek talep etmeye çalıştığında uygulamanın kilitlenmesine neden olabilir. Aşağıdaki örnek, dosyadaki değeri 268.435.456 bayt Program olarak ayarlar:

Mobil cihaz tarayıcılarını, özellikle de iOS'ta Safari'yi hedefleyen bir Blazor WebAssembly uygulama oluştururken, MSBuild özelliğine EmccMaximumHeapSize sahip uygulama için maksimum belleğin azaltılması gerekebilir. Varsayılan değer 2.147.483.648 bayttır; bu miktar çok büyük olabilir ve tarayıcı, uygulamanın talep ettiği daha fazla belleği sağlamazsa uygulamanın çökmesine neden olabilir. Aşağıdaki örnek, dosyadaki değeri 268.435.456 bayt Program olarak ayarlar:

<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>

Mono/WebAssembly MSBuild özellikleri ve hedefleri hakkında daha fazla bilgi için WasmApp.Common.targets bölümüne bakın (dotnet/runtime GitHub deposu).

.NET derlemeleri için webcil paketleme biçimi

Webcil , kısıtlayıcı ağ ortamlarında kullanımı Blazor WebAssembly etkinleştirmek üzere tasarlanmış .NET derlemeleri için web dostu bir paketleme biçimidir. Webcil dosyaları, derlemelerin WebAssembly dosyaları olarak dağıtıldığı ve bu dosyaların standart .wasm dosya uzantısını kullandığı standart bir WebAssembly sarmalayıcı kullanır.

Webcil, bir Blazor WebAssembly uygulama yayımladığınızda varsayılan paketleme biçimidir. Webcil kullanımını devre dışı bırakmak için uygulamanın proje dosyasında aşağıdaki MSBuild özelliğini ayarlayın:

<PropertyGroup>
  <WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>

Önyükleme kaynaklarının yüklenme şeklini özelleştirme

Önyükleme kaynaklarının nasıl yükleneceğini API loadBootResource kullanarak özelleştirin. Daha fazla bilgi için bkz . ASP.NET Core Blazor başlatma.

Sıkıştırma

Bir Blazor WebAssembly uygulama yayımlandığında, uygulamanın boyutunu küçültmek ve çalışma zamanı sıkıştırma ek yükünü kaldırmak için çıkış yayımlama sırasında statik olarak sıkıştırılır. Aşağıdaki sıkıştırma algoritmaları kullanılır:

Blazor uygun sıkıştırılmış dosyaları sunmak için ana bilgisayara güvenir. Tek başına bir Blazor WebAssembly uygulama barındırırken, statik olarak sıkıştırılmış dosyaların sunulduğundan emin olmak için ek çalışma gerekebilir:

Blazor uygun sıkıştırılmış dosyaların sunulması için konağa bağlıdır. ASP.NET Core Barındırılan bir proje kullanıldığında, konak proje içerik müzakeresi gerçekleştirebilir ve statik olarak sıkıştırılmış dosyaları sunabilir. Tek başına bir Blazor WebAssembly uygulama barındırırken, statik olarak sıkıştırılmış dosyaların sunulduğundan emin olmak için ek çalışma gerekebilir:

  • IIS web.config sıkıştırma yapılandırması için IIS: Brotli ve Gzip sıkıştırma bölümüne bakın.
  • Statik olarak sıkıştırılmış dosya içeriği müzakeresini desteklemeyen statik barındırma çözümlerinde barındırma yaparken, uygulamanızı Brotli sıkıştırılmış dosyaları alıp çözümleyecek şekilde yapılandırmayı göz önünde bulundurun.

JavaScript Brotli çözücüsünü GitHub deposundan edinin. Küçültüldü kod çözücü dosyası adlandırılır decode.min.js ve deponun js klasöründe bulunur.

Not

Betiğin decode.js (decode.min.js) küçültülmüş sürümü başarısız olursa, bunun yerine küçültülmemiş sürümü (decode.js) kullanmayı deneyin.

Uygulamayı kod çözücüsü kullanacak şekilde güncelleştirin.

wwwroot/index.html dosyasında, Blazor'nin <script> etiketine autostart'i false olarak ayarlayın.

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

etiketinden Blazor sonra <script>ve kapanış </body> etiketinden önce aşağıdaki JavaScript kod <script> bloğunu ekleyin. Aşağıdaki işlev, tarayıcının önbelleğini güncel tutmak için fetch ile cache: 'no-cache' çağırır.

Blazor Web App:

<script type="module">
  import { BrotliDecode } from './decode.min.js';
  Blazor.start({
    webAssembly: {
      loadBootResource: function (type, name, defaultUri, integrity) {
        if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration' && type !== 'manifest') {
          return (async function () {
            const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
            if (!response.ok) {
              throw new Error(response.statusText);
            }
            const originalResponseBuffer = await response.arrayBuffer();
            const originalResponseArray = new Int8Array(originalResponseBuffer);
            const decompressedResponseArray = BrotliDecode(originalResponseArray);
            const contentType = type === 
              'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
            return new Response(decompressedResponseArray, 
              { headers: { 'content-type': contentType } });
          })();
        }
      }
    }
  });
</script>

Tek başına Blazor WebAssembly:

<script type="module">
  import { BrotliDecode } from './decode.min.js';
  Blazor.start({
    loadBootResource: function (type, name, defaultUri, integrity) {
      if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration') {
        return (async function () {
          const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
          if (!response.ok) {
            throw new Error(response.statusText);
          }
          const originalResponseBuffer = await response.arrayBuffer();
          const originalResponseArray = new Int8Array(originalResponseBuffer);
          const decompressedResponseArray = BrotliDecode(originalResponseArray);
          const contentType = type === 
            'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
          return new Response(decompressedResponseArray, 
            { headers: { 'content-type': contentType } });
        })();
      }
    }
  });
</script>

Önyükleme kaynaklarını yükleme hakkında daha fazla bilgi için bkz: ASP.NET Core Blazor başlangıç.

Sıkıştırmayı CompressionEnabled devre dışı bırakmak için UYGULAMANıN proje dosyasına MSBuild özelliğini ekleyin ve değerini olarak falseayarlayın:

<PropertyGroup>
  <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

Komut kabuğunda ` dotnet publish ` komutuna, ` CompressionEnabled ` özelliği aşağıdaki söz dizimi ile geçirilebilir.

dotnet publish -p:CompressionEnabled=false

Sıkıştırmayı BlazorEnableCompression devre dışı bırakmak için UYGULAMANıN proje dosyasına MSBuild özelliğini ekleyin ve değerini olarak falseayarlayın:

<PropertyGroup>
  <BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>

Komut kabuğunda, BlazorEnableCompression özelliği dotnet publish komutuna aşağıdaki söz dizimi ile geçirilebilir.

dotnet publish -p:BlazorEnableCompression=false

Doğru yönlendirme için URL'leri yeniden yazma

Bir Blazor WebAssembly uygulamadaki sayfa bileşenleri için yönlendirme istekleri, bir uygulamadaki Blazor Server yönlendirme istekleri kadar basit değildir. İki bileşeni olan bir Blazor WebAssembly uygulamayı göz önünde bulundurun:

  • Main.razor: Uygulamanın kökünde yüklenir ve About bileşenine (href="About") bir bağlantı içerir.
  • About.razor: About bileşeni.

Tarayıcının adres çubuğu kullanılarak uygulamanın varsayılan belgesi istendiğinde (örneğin, https://www.contoso.com/):

  1. Tarayıcı bir istekte bulunur.
  2. Varsayılan sayfa döndürülür ve bu genellikle index.htmlşeklindedir.
  3. index.html uygulamayı başlatır.
  4. Router bileşen yüklenir ve RazorMain bileşen render edilir.

Ana sayfada, About bileşeninin bağlantısını seçmek istemcide çalışır çünkü Blazor yönlendirici, tarayıcının www.contoso.com için İnternet'te About istekte bulunmasını durdurur ve işlenen About bileşene kendisi hizmet eder. Uygulama içindeki Blazor WebAssembly iç uç noktalara yönelik tüm istekler aynı şekilde çalışır: İstekler, İnternet'te sunucu tarafından barındırılan kaynaklara yönelik tarayıcı tabanlı istekleri tetiklemez. Yönlendirici istekleri dahili olarak işler.

için tarayıcının adres çubuğu www.contoso.com/Aboutkullanılarak bir istek yapılırsa istek başarısız olur. Uygulamanın İnternet ana bilgisayarında böyle bir kaynak olmadığından 404 - Bulunamadı yanıtı döndürülür.

Tarayıcılar istemci tarafı sayfalar için İnternet tabanlı konaklara istekte bulunacağından, web sunucuları ve barındırma hizmetleri sunucuda fiziksel olarak olmayan kaynaklara yönelik tüm istekleri sayfaya index.html yeniden yazmalıdır. index.html döndürüldüğünde, uygulamanın Blazor yönlendiricisi devralır ve doğru kaynakla yanıt verir.

IIS sunucusuna dağıtım yaparken, url yeniden yazma modülünü uygulamanın yayımlanan web.config dosyasıyla kullanabilirsiniz. Daha fazla bilgi için IIS bölümüne bakın.

ASP.NET Core ile barındırılan dağıtım

Barındırılan dağıtım, tarayıcılara web sunucusunda çalışan bir ASP.NET Core uygulamasıBlazor WebAssembly uygulaması sunar.

İstemci Blazor WebAssembly uygulaması, sunucu uygulamasının /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot diğer statik web varlıklarıyla birlikte sunucu uygulamasının klasörüne yayımlanır. İki uygulama birlikte dağıtılır. ASP.NET Core uygulaması barındırabilen bir web sunucusu gereklidir. Barındırılan bir dağıtım için, Visual Studio, Blazor WebAssembly Uygulama projesi şablonunu (blazorwasm komutu kullanıldığında dotnet new şablon) ve Hosted seçeneği seçili olarak (-ho|--hosted komutu kullanıldığında dotnet new) içerir.

Daha fazla bilgi için aşağıdaki makaleleri inceleyin:

Belirli bir platform için çerçeveye bağımlı yürütülebilir dosyanın barındırılan dağıtımı

Barındırılan Blazor WebAssembly bir uygulamayı belirli bir platform (bağımsız olmayan) için çerçeveye bağımlı yürütülebilir dosya olarak dağıtmak için, kullanımdaki araçlara bağlı olarak aşağıdaki yönergeleri kullanın.

Visual Studio

Kendi kendine yeterli bir dağıtım, oluşturulmuş bir yayın profili için yapılandırılır (.pubxml). Projenin yayımlama profilinin Server olarak ayarlanmış MSBuild özelliğini içerdiğini <SelfContained>falseonaylayın.

Projenin .pubxml klasöründeki ServerProperties yayımlama profili dosyasında:

<SelfContained>false</SelfContained>

Çalışma Zamanı Tanımlayıcısını (RID), Yayımlama UI'sında bulunan Ayarlar alanındaki Hedef Çalışma Zamanı ayarını kullanarak ayarlayın, bu, yayımlama profilinde <RuntimeIdentifier> MSBuild özelliğini oluşturur.

<RuntimeIdentifier>{RID}</RuntimeIdentifier>

Önceki yapılandırmada {RID} yer tutucu, Çalışma Zamanı Tanımlayıcısı (RID)'dir.

Server Projeyi Yayın yapılandırmasında yayımlayın.

Not

.NET CLI kullanarak yayın profili ayarları ile bir uygulama yayımlamak mümkündür. Bunu yapmak için, `{PROFILE}` yer tutucusu profil olacak şekilde `/p:PublishProfile={PROFILE}` komutuna `dotnet publish` geçirmeniz yeterlidir. Daha fazla bilgi için, ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profilleri (.pubxml) makalesindeki Profilleri yayımlama ve Klasör yayımlama örneği bölümlerine bakın. RID'yi komutunda ve yayımlama profilinde değil geçirirseniz, MSBuild özelliğini (/p:RuntimeIdentifier) -r|--runtime seçeneğiyle değil komutu ile kullanın.

.NET CLI

Projenin proje dosyasında <SelfContained> MSBuild özelliğini false olarak ayarlayarak kendine yeten bir dağıtım yapılandırın:

<SelfContained>false</SelfContained>

Önemli

SelfContained özelliği projenin proje dosyasına yerleştirilmelidirServer. --no-self-contained seçeneği veya MSBuild özelliği /p:SelfContained=false kullanılarak dotnet publish komutuyla, özellik doğru bir şekilde ayarlanamaz.

Aşağıdaki yaklaşımlardan birini kullanarak Çalışma Zamanı Tanımlayıcısı'nı (RID) ayarlayın:

  • Seçenek 1: RID'yi, projenin <PropertyGroup> içindeki Server proje dosyasında ayarlayın.

    <RuntimeIdentifier>{RID}</RuntimeIdentifier>
    

    Önceki yapılandırmada yerleştirilen {RID} tutucu, Çalışma Zamanı Tanımlayıcı (RID)'dir.

    Uygulamayı Yayın yapılandırmasında Server projesinden yayımlayın.

    dotnet publish -c Release
    
  • Seçenek 2: RID'yi komutunda MSBuild özelliği () olarak geçirin, seçeneğini kullanarak değil.

    dotnet publish -c Release /p:RuntimeIdentifier={RID}
    

    Yukarıdaki komutta {RID} yer tutucu Çalışma Zamanı Tanımlayıcısı (RID)'dir.

Daha fazla bilgi için aşağıdaki makaleleri inceleyin:

Birden çok uygulamayla barındırılan Blazor WebAssembly dağıtım

Daha fazla bilgi için Birden fazla barındırılan ASP.NET Core Blazor WebAssembly uygulaması bölümüne bakın.

Bağımsız dağıtım

Tek başına dağıtım, uygulamayı doğrudan istemcilerin talep ettiği bir dizi statik dosya olarak sunar. Herhangi bir statik dosya sunucusu Blazor uygulamasını sunabilir.

Tek başına dağıtım varlıkları, {TARGET FRAMEWORK} yer tutucusunun hedef çerçeve olduğu /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot veya bin\Release\{TARGET FRAMEWORK}\browser-wasm\publish\ klasörüne (kullanılan .NET SDK sürümüne bağlı olarak) yayımlanır.

Azure App Service

Blazor WebAssemblyuygulamalar, uygulamayı IIS'de barındıran Windows'da Azure Uygulaması Hizmetlerine dağıtılabilir.

Linux için Azure Uygulaması Hizmeti'ne tek başına Blazor WebAssembly uygulama dağıtma şu anda desteklenmiyor. Bu senaryoyu destekleyen Blazor WebAssembly uygulamanın Azure Static Web Apps kullanarak tek başına barındırılmasını öneririz.

Azure Statik Web Uygulamaları

Azure Static Web Apps'e uygulama Blazor WebAssembly dağıtmak için aşağıdaki yaklaşımlardan birini kullanın:

Visual Studio'dan dağıtma

Visual Studio'dan dağıtmak için Azure Static Web Apps için bir yayımlama profili oluşturun:

  1. İşlem sırasında Visual Studio yeniden başlatması gerekebileceğinden, projedeki kaydedilmemiş tüm çalışmaları kaydedin.

  2. Visual Studio'nun Yayımlama kullanıcı arabiriminde, bir yayımlama profili oluşturmak için Hedef>Azure>Özel Hedef>Azure Statik Web Uygulamaları seçeneğini seçin.

  3. Visual Studio için Azure Web İşleri Araçları bileşeni yüklü değilse, ASP.NET ve web geliştirme bileşenini yüklemek için bir istem görüntülenir. Visual Studio Yükleyicisi kullanarak araçları yüklemek için istemleri izleyin. Visual Studio, araçları yüklerken otomatik olarak kapatılıp yeniden açılır. Araçlar yüklendikten sonra yayımlama profilini oluşturmak için ilk adımda baştan başlayın.

  4. Yayımlama profili yapılandırmasında Abonelik adını belirtin. Mevcut bir örneği seçin veya Yeni örnek oluştur'u seçin. Azure portalının Statik Web Uygulaması Oluştur kullanıcı arabiriminde yeni bir örnek oluştururken, Dağıtım ayrıntılarıKaynağınıDiğer olarak ayarlayın. Devam etmeden önce Azure portalında dağıtımın tamamlanmasını bekleyin.

  5. Yayımlama profili yapılandırmasında, kaynak grubundaki Azure Static Web Apps örneğini seçin. Yayımlama profilini oluşturmak için Son'u seçin. Visual Studio Statik Web Uygulamaları (SWA) CLI'sını yüklemek isterse, istemleri izleyerek CLI'yi yükleyin. SWA CLI için NPM/Node.js (Visual Studio belgeleri)gerekir.

Yayımlama profili oluşturulduktan sonra Yayımla düğmesini seçerek yayımlama profilini kullanarak uygulamayı Azure Static Web Apps örneğine dağıtın.

Visual Studio Code'dan dağıtma

Visual Studio Code'dan dağıtmak için bkz . Hızlı Başlangıç: Azure Static Web Apps ile ilk statik sitenizi oluşturma.

GitHub’dan dağıtım

GitHub deposundan dağıtım yapmak için Azure Static Web Apps'te Blazor ile nasıl statik web uygulaması oluşturulacağını gösteren Eğiticiye bakın.

IIS

IIS, uygulamalar için Blazor yetenekli bir statik dosya sunucusudur. IIS'i Blazor barındırmaya yönelik yapılandırmak için IIS Üzerinde Statik Web Sitesi Oluşturma bölümüne bakın.

Yayımlanan varlıklar, SDK'nın hangi sürümünün kullanıldığına ve {TARGET FRAMEWORK} yer tutucusunun hedef çerçeve olduğuna bağlı olarak /bin/Release/{TARGET FRAMEWORK}/publish veya bin\Release\{TARGET FRAMEWORK}\browser-wasm\publish klasöründe oluşturulur. Klasörün içeriğini publish web sunucusunda veya barındırma hizmetinde barındırın.

web.config

Proje Blazor yayımlandığında, aşağıdaki IIS yapılandırmasıyla bir web.config dosya oluşturulur:

  • MIME türleri
  • HTTP sıkıştırması aşağıdaki MIME türleri için etkinleştirilir:
    • application/octet-stream
    • application/wasm
  • URL Yeniden Yazma Modülü kuralları oluşturulur:
    • Uygulamanın statik varlıklarının (wwwroot/{PATH REQUESTED}) bulunduğu alt dizine hizmet edin.
    • Dosya olmayan varlıklara yönelik isteklerin statik varlıklar klasöründeki (wwwroot/index.html ) uygulamanın varsayılan belgesine yeniden yönlendirilmesi için SPA geri dönüş yönlendirmesi oluşturun.

Özel bir web.config kullan

Özel web.config bir dosya kullanmak için:

  1. Özel web.config dosyayı projenin kök klasörüne yerleştirin.
  2. Projeyi yayımlayın. Daha fazla bilgi için bkz . ASP.NET Core'u Blazorbarındırma ve dağıtma.
  1. Özel web.config dosyayı projenin kök klasörüne yerleştirin. Barındırılan Blazor WebAssemblybir çözüm için dosyayı Server projenin klasörüne yerleştirin.
  2. Projeyi yayımlayın. Barındırılan bir Blazor WebAssembly çözüm için, projeden Server çözümü yayınlayın. Daha fazla bilgi için bkz . ASP.NET Core'u Blazorbarındırma ve dağıtma.

SDK'nin web.config yayımlama sırasındaki oluşturma veya dönüştürme işlemi, dosyayı publish klasöründeki yayımlanmış varlıklara taşımaz veya özel web.config dosyanızdaki yapılandırmayı değiştirirse, işlemi tamamen kontrol altına almak için aşağıdaki yaklaşımlardan herhangi birini kullanın.

  • SDK dosyayı oluşturmuyorsa, örneğin, hangi SDK sürümünün kullanıldığına ve {TARGET FRAMEWORK} yer tutucusunun hedef çerçeve olduğuna bağlı olarak /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot veya bin\Release\{TARGET FRAMEWORK}\browser-wasm\publish konumundaki bağımsız Blazor WebAssembly uygulamada, proje dosyasında (.csproj) <PublishIISAssets> özelliğini true olarak ayarlayın. Genellikle tek başına WebAssembly uygulamaları için, özel web.config bir dosyayı taşımak ve dosyanın SDK tarafından dönüştürülmesini önlemek için gereken tek ayar budur.

    <PropertyGroup>
      <PublishIISAssets>true</PublishIISAssets>
    </PropertyGroup>
    
  • Sdk'nın web.config proje dosyasındaki dönüştürmesini devre dışı bırakın (.csproj):

    <PropertyGroup>
      <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
    </PropertyGroup>
    
  • Özel bir dosyayı taşımak için proje dosyasına (.csproj) özel web.config bir hedef ekleyin. Aşağıdaki örnekte, özel web.config dosya geliştirici tarafından projenin köküne yerleştirilir. web.config Dosya başka bir yerde bulunuyorsa, dosyanın SourceFiles yolunu belirtin. Aşağıdaki örnek, publish klasörünü $(PublishDir) ile belirtir, ancak özel çıkış konumu için DestinationFolder yolunu belirtir.

    <Target Name="CopyWebConfig" AfterTargets="Publish">
      <Copy SourceFiles="web.config" DestinationFolder="$(PublishDir)" />
    </Target>
    

URL Yeniden Yazma Modülünü Yükleme

URL'leri yeniden yazmak için URL Yeniden Yazma Modülü gereklidir. Modül varsayılan olarak yüklenmez ve Web Sunucusu (IIS) rol hizmeti özelliği olarak yüklenemez. Modülün IIS web sitesinden indirilmesi gerekir. Modülü yüklemek için Web Platformu Yükleyicisi'ni kullanın:

  1. Yerel olarak URL Yeniden Yazma Modülü indirmeleri sayfasına gidin. İngilizce sürüm için WebPI yükleyicisini indirmek için WebPI'yi seçin. Diğer diller için, yükleyiciyi indirmek üzere sunucu (x86/x64) için uygun mimariyi seçin.
  2. Yükleyiciyi sunucuya kopyalayın. Yükleyiciyi çalıştırın. Yükle düğmesini seçin ve lisans koşullarını kabul edin. Yükleme tamamlandıktan sonra sunucunun yeniden başlatılması gerekmez.

Web sitesini yapılandırma

Web sitesinin Fiziksel yolunu uygulamanın klasörüne ayarlayın. Klasör aşağıdakileri içerir:

  • Iis'nin web.config gerekli yeniden yönlendirme kuralları ve dosya içerik türleri de dahil olmak üzere web sitesini yapılandırmak için kullandığı dosya.
  • Uygulamanın statik varlık klasörü.

IIS alt uygulaması olarak barındırma

Tek başına bir uygulama IIS alt uygulaması olarak barındırılıyorsa aşağıdakilerden birini gerçekleştirin:

  • Devralınan ASP.NET Çekirdek Modülü işleyicisini devre dışı bırakın.

    dosyasındaki işleyiciyi kaldırmak için, dosyanın bölümüne bir bölümü ekleyin:

    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    
  • Kök (üst) uygulamanın inheritInChildApplications bölümünün devralınmasını, içinde false olarak ayarlanmış bir <location> öğesi bulunan <system.webServer> kullanarak devre dışı bırakın.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <handlers>
            <add name="aspNetCore" ... />
          </handlers>
          <aspNetCore ... />
        </system.webServer>
      </location>
    </configuration>
    

    Not

    Kök (üst) uygulamanın <system.webServer> bölümünün devralmayı devre dışı bırakmak, .NET SDK'sı kullanılarak yayımlanan uygulamalar için varsayılan yapılandırmadır.

İşleyiciyi kaldırma veya devralmayı devre dışı bırakma işlemi, uygulamanın temel yolunu yapılandırmaya ek olarak gerçekleştirilir. Uygulamanın temel yolunu uygulamanın index.html dosyasında, IIS'de alt uygulamayı yapılandırırken kullanılan IIS takma adına uyacak şekilde ayarlayın.

ASP.NET Core'u barındırma ve dağıtma makalesindeki yönergeleri izleyerek uygulamanın temel yolunu yapılandırın.

Brotli ve Gzip sıkıştırma

Bu bölüm yalnızca tek başına Blazor WebAssembly uygulamalar için geçerlidir.

Bu bölüm yalnızca tek başına Blazor WebAssembly uygulamalar için geçerlidir. Barındırılan Blazor uygulamalar, bu bölümde bağlantılı dosyayı değil, varsayılan ASP.NET Core uygulama web.config dosyasını kullanır.

IIS, web.config aracılığıyla tek başına uygulamalar için Brotli veya Gzip ile sıkıştırılmış Blazor dosyalara hizmet vermek üzere yapılandırılabilir Blazor WebAssembly. Örnek bir yapılandırma dosyası için bkz web.config. .

Aşağıdaki senaryolarda örnek web.config dosyanın ek yapılandırması gerekebilir:

  • Uygulamanın şartnamesi aşağıdakilerden birini gerektirir:
    • Örnek web.config dosya tarafından yapılandırılmamış sıkıştırılmış dosyaların sunulması.
    • Örnek web.config dosya tarafından yapılandırılan sıkıştırılmış dosyaları sıkıştırılmamış biçimde sunma.
  • Sunucunun IIS yapılandırması (örneğin, applicationHost.config) sunucu düzeyinde IIS varsayılanları sağlar. Sunucu düzeyinde yapılandırmaya bağlı olarak, uygulama örnek web.config dosyanın içerdiğinden farklı bir IIS yapılandırması gerektirebilir.

Özel web.config dosyalar hakkında daha fazla bilgi için Özel web.config dosya kullanma bölümüne bakın.

Sorun giderme

Web sitesinin yapılandırmasına erişmeye çalışırken bir 500 - İç Sunucu Hatası alınırsa ve IIS Yöneticisi hata oluşturursa, URL Yeniden Yazma Modülünün yüklendiğini onaylayın. Modül yüklenmediğinde, web.config dosya IIS tarafından ayrıştırılamaz. Bu, IIS Yöneticisi'nin web sitesinin yapılandırmasını yüklemesini ve web sitesinin Blazor'nin statik dosyalarını sunmasını engeller.

IIS dağıtımlarında sorun giderme hakkında daha fazla bilgi için bkz. Azure Uygulama Hizmeti ve IIS üzerinde ASP.NET Core sorunlarını giderme.

Azure Depolama

Azure Depolama statik dosya barındırma sunucusuz Blazor uygulama barındırmaya izin verir. Özel etki alanı adları, Azure Content Delivery Network (CDN) ve HTTPS desteklenir.

Blob hizmeti bir depolama hesabında statik web sitesi barındırma için etkinleştirildiğinde:

  • Dizin belge adını olarak index.htmlayarlayın.
  • Hata belgesi yolunu olarak index.htmlayarlayın. Razor bileşenleri ve diğer dosya dışı uç noktalar blob hizmeti tarafından depolanan statik içerikteki fiziksel yollarda yer almaz. Yönlendiricinin işlemesi gereken bu kaynaklardan birine yönelik bir istek alındığında Blazor , blob hizmeti tarafından oluşturulan 404 - Bulunamadı hatası isteği Hata belgesi yoluna yönlendirir. Blob index.html döndürülür ve Blazor yönlendirici yolu yükler ve işler.

Dosyaların üst bilgilerindeki uygunsuz MIME türleri nedeniyle çalışma zamanında dosyalar Content-Type yüklenmiyorsa, aşağıdaki eylemlerden birini gerçekleştirin:

  • Dosyalar dağıtıldığında doğru MIME türlerini (Content-Type üst bilgiler) ayarlamak için araçlarınızı yapılandırın.

  • Uygulama dağıtıldıktan sonra dosyaların MIME türlerini (Content-Type üst bilgiler) değiştirin.

    Her dosya için Depolama Gezgini(Azure portalı) içinde:

    1. Dosyaya sağ tıklayın ve Özellikler’i seçin.
    2. ContentType'ı ayarlayın ve Kaydet düğmesini seçin.

Daha fazla bilgi için bkz . Azure Depolama'da statik web sitesi barındırma.

Nginx

Aşağıdaki nginx.conf dosya, Nginx'in diskte karşılık gelen bir dosyayı bulamayışında index.html dosyayı gönderecek şekilde nasıl yapılandırıldığını gösterecek şekilde basitleştirilmiştir.

events { }
http {
    server {
        listen 80;

        location / {
            root      /usr/share/nginx/html;
            try_files $uri $uri/ /index.html =404;
        }
    }
}

NGINX seri hızı sınırınılimit_req ile ayarlarken, bir uygulama tarafından yapılan görece çok sayıda isteği karşılamak için uygulamalar büyük bir burst parametre değeri gerektirebilir. Başlangıçta değeri en az 60 olarak ayarlayın:

http {
    server {
        ...

        location / {
            ...

            limit_req zone=one burst=60 nodelay;
        }
    }
}

Tarayıcı geliştirici araçları veya ağ trafiği aracı isteklerin 503 - Hizmet Kullanılamıyor durum kodu aldığını gösteriyorsa değeri artırın.

Üretim için Nginx web sunucusu yapılandırması hakkında daha fazla bilgi için bkz NGINX Plus ve NGINX Yapılandırma Dosyaları Oluşturma.

Apache

Apache'ye uygulama Blazor WebAssembly dağıtmak için:

  1. Apache yapılandırma dosyasını oluşturun. Aşağıdaki örnek, basitleştirilmiş bir yapılandırma dosyasıdır (blazorapp.config):

    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias *.example.com
    
        DocumentRoot "/var/www/blazorapp"
        ErrorDocument 404 /index.html
    
        AddType application/wasm .wasm
    
        <Directory "/var/www/blazorapp">
            Options -Indexes
            AllowOverride None
        </Directory>
    
        <IfModule mod_deflate.c>
            AddOutputFilterByType DEFLATE text/css
            AddOutputFilterByType DEFLATE application/javascript
            AddOutputFilterByType DEFLATE text/html
            AddOutputFilterByType DEFLATE application/octet-stream
            AddOutputFilterByType DEFLATE application/wasm
            <IfModule mod_setenvif.c>
                BrowserMatch ^Mozilla/4 gzip-only-text/html
                BrowserMatch ^Mozilla/4.0[678] no-gzip
                BrowserMatch bMSIE !no-gzip !gzip-only-text/html
            </IfModule>
        </IfModule>
    
        ErrorLog /var/log/httpd/blazorapp-error.log
        CustomLog /var/log/httpd/blazorapp-access.log common
    </VirtualHost>
    
  1. Apache yapılandırma dosyasını oluşturun. Aşağıdaki örnek, basitleştirilmiş bir yapılandırma dosyasıdır (blazorapp.config):

    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias *.example.com
    
        DocumentRoot "/var/www/blazorapp"
        ErrorDocument 404 /index.html
    
        AddType application/wasm .wasm
        AddType application/octet-stream .dll
    
        <Directory "/var/www/blazorapp">
            Options -Indexes
            AllowOverride None
        </Directory>
    
        <IfModule mod_deflate.c>
            AddOutputFilterByType DEFLATE text/css
            AddOutputFilterByType DEFLATE application/javascript
            AddOutputFilterByType DEFLATE text/html
            AddOutputFilterByType DEFLATE application/octet-stream
            AddOutputFilterByType DEFLATE application/wasm
            <IfModule mod_setenvif.c>
                BrowserMatch ^Mozilla/4 gzip-only-text/html
                BrowserMatch ^Mozilla/4.0[678] no-gzip
                BrowserMatch bMSIE !no-gzip !gzip-only-text/html
            </IfModule>
        </IfModule>
    
        ErrorLog /var/log/httpd/blazorapp-error.log
        CustomLog /var/log/httpd/blazorapp-access.log common
    </VirtualHost>
    
  1. Apache yapılandırma dosyasını dizinine /etc/httpd/conf.d/ yerleştirin.

  2. Uygulamanın yayınlanmış varlıklarını (/bin/Release/{TARGET FRAMEWORK}/publish/wwwroot içindeki yer tutucu hedef çerçevedir) /var/www/blazorapp dizinine (yapılandırma dosyasında DocumentRoot'e belirtilen konum) yerleştirin.

  3. Apache hizmetini yeniden başlatın.

Daha fazla bilgi için bkz. mod_mime ve mod_deflate.

GitHub Pages

Blazor WebAssembly uygulamalarının GitHub Pages dağıtımları için aşağıdaki rehber, GitHub Pages'a dağıtılan canlı bir araç kullanarak kavramları gösterir. Araç, ASP.NET Core belge yazarları tarafından makale markdown için API belgelerine çapraz başvuru (XREF) bağlantıları oluşturmak için kullanılır:

GitHub Sayfaları ayarları

  • Eylemler>Genel
    • Eylem izinleri
      • Kurumsal eylemlere izin verin ve , kurumsal olmayan eylemleri ve yeniden kullanılabilir iş akışlarını seçin> (etkinleştirilmiş, seçili).
      • GitHub tarafından oluşturulan eylemlere izin ver> Etkin (seçili)
      • eylemlere ve yeniden kullanılabilir iş akışlarına izin ver>stevesandersonms/ghaction-rewrite-base-href@v1,
    • İş Akışı izinleri>Depo içeriğini okuma ve paket izinleri
  • Pages>Derleme ve dağıtım

Statik dağıtım betiği yapılandırması

Xref Oluşturucu static.yml dosyası

Dağıtımınız için betikte aşağıdaki girdileri yapılandırın:

  • Yayımlama dizini (PUBLISH_DIR): Blazor WebAssembly uygulamasının yayımlandığı deponun klasörünün yolunu kullanın. Uygulama, belirli bir .NET sürümü için derlenmiştir ve yol bölümünün bu sürümle eşleşmesi gerekir. Örnek: BlazorWebAssemblyXrefGenerator/bin/Release/net9.0/publish/wwwroot, .NET 9.0 SDK'sı için net9.0Hedef Çerçeve Tanımlayıcısı (TDP) benimseyen bir uygulamanın yoludur
  • Gönderme yolu (on:push:paths): Gönderme yolunu uygulamanın depo klasörüyle ** joker karakteriyle eşleşecek şekilde ayarlayın. Örnek: BlazorWebAssemblyXrefGenerator/**
  • .NET SDK sürümü (dotnet-versionaracılığıylaactions/setup-dotnet): Şu anda, sürümü "en son" olarak ayarlamanın bir yolu yoktur (bkz. actions/setup-dotnet). SDK sürümünü en az uygulamanın çerçeve sürümü kadar yüksek ayarlayın.
  • Yayımlama yolu (dotnet publish komutu): Yayımlama klasörü yolunu uygulamanın depo klasörüne ayarlayın. Örnek: dotnet publish BlazorWebAssemblyXrefGenerator -c Release
  • Temel HREF (base_hrefSteveSandersonMS/ghaction-rewrite-base-href Eylemi için): Uygulamanın temel href değerini depo adına ayarlayın. Örnek: Blazor örneğinin depo sahibi dotnet. Blazor örneğinin deposunun adı blazor-samples. Xref Oluşturucu aracı GitHub Pages'e dağıtıldığında, web adresi deponun adına (https://dotnet.github.io/blazor-samples/) dayanır. Uygulamanın temel href'i /blazor-samples/'dir ve uygulama dağıtıldığında, base_href Eylemi'nin uygulamanın wwwroot/index.html<base> etiketine yazması için ghaction-rewrite-base-href olarak ayarlanır. Daha fazla bilgi için bkz . ASP.NET Core'u Blazorbarındırma ve dağıtma.

GitHub tarafından barındırılan Ubuntu (en son) sunucusunda önceden yüklenmiş bir .NET SDK sürümü vardır. Önceden yüklenmiş .NET SDK'sı uygulamayı derlemek için yeterliyse actions/setup-dotnet Eylemi adımını static.yml betiğinden kaldırabilirsiniz. ubuntu-latestiçin yüklenen .NET SDK'sını belirlemek için:

  1. GitHub deposununKullanılabilir Görüntüler bölümüne gidin.
  2. İlk tablo satırı olan ubuntu-latest görüntüsünü bulun.
  3. Included Software sütunundaki bağlantıyı seçin.
  4. Görüntüyle birlikte yüklenen .NET Core SDK'sını görmek için ekranı aşağı kaydırarak .NET Araçları bölümüne gelin.

Dağıtım notları

Varsayılan GitHub Eylemi, sayfaları dağıtırken, alt çizgi ile başlayan klasörlerin, örneğin _framework klasörünün, dağıtımını atlar. Alt çizgiyle başlayan klasörleri dağıtmak için, uygulamanın deposunun köküne boş bir .nojekyll dosyası ekleyin. Örnek: Xref Oluşturucu .nojekyll dosyası

bu adımı ilk uygulama dağıtımından önce gerçekleştirin: Git, JSgibi JavaScript (blazor.webassembly.js) dosyalarını metin olarak ele alır ve satır sonlarını CRLF'den (satır dönüş satırı akışı) dağıtım işlem hattında LF'ye (satır beslemesi) dönüştürür. JS dosyalarındaki bu değişiklikler, istemcinin Blazor dosyasında gönderdiğinden farklı dosya karmaları oluşturur. Uyuşmazlıklar, istemci tarafında veri bütünlüğü denetimi hatalarına neden olur. Bu sorunu çözmenin bir yaklaşımı, uygulamanın varlıklarını Git dalına eklemeden önce, *.js binary satırı olan bir .gitattributes dosyası eklemektir. Git'i *.js binary dosyaları ikili dosyalar olarak değerlendirecek şekilde yapılandıran JS satırı, dağıtım işlem hattında dosyaların işlenmesini önler. İşlenmemiş dosyaların dosya karmaları dosyadaki blazor.boot.json girdilerle eşleşir ve istemci tarafı bütünlük denetimleri geçer. Daha fazla bilgi için bkz . ASP.NET Core Blazor WebAssembly .NET çalışma zamanı ve uygulama paketi önbelleğe alma. Örnek: Xref Oluşturucu .gitattributes dosyası

GitHub Sayfaları için Tek Sayfalı Uygulamaları (rafrex/spa-github-pages GitHub deposu) temel alan URL yeniden yazma işlemlerini işlemek için:

GitHub Pages, Brotli ile sıkıştırılmış kaynakların kullanılmasını yerel olarak desteklemez. Brotli'yi kullanmak için:

Docker ile tek başına

Bağımsız bir Blazor WebAssembly uygulama, statik dosya sunucusunda barındırılmak üzere bir dizi statik dosya olarak yayımlanır.

Uygulamayı Docker'da barındırmak için:

  • Nginx veya Apache gibi web sunucusu desteğine sahip bir Docker kapsayıcısı seçin.
  • publish Klasör varlıklarını, statik dosyalara hizmet vermek için web sunucusunda tanımlanan bir konum klasörüne kopyalayın.
  • Blazor WebAssembly uygulamasına hizmet vermek için gerekli ek yapılandırmayı uygulayın.

Yapılandırma yönergeleri için aşağıdaki kaynaklara bakın:

Sunucu yapılandırma değerleri

Blazor WebAssembly uygulamalar, geliştirme ortamında çalışma zamanı sırasında komut satırı bağımsız değişkenleri olarak aşağıdaki konak yapılandırma değerlerini kabul edebilir.

İçerik kökü

bağımsız değişkeni, --contentroot uygulamanın içerik dosyalarını (içerik kökü) içeren dizinin mutlak yolunu ayarlar. Aşağıdaki örneklerde uygulamanın /content-root-path içerik kök yolu verilmiştir.

  • Uygulamayı komut satırında yerel olarak çalıştırırken argümanını verin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --contentroot=/content-root-path
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulama Visual Studio Hata Ayıklayıcısı ile çalıştırıldığında ve (veya dotnet watch) ile dotnet run bir komut isteminden çalıştırıldığında kullanılır.

    "commandLineArgs": "--contentroot=/content-root-path"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri altında bağımsız değişkenini belirtin. Visual Studio özellik sayfasında bağımsız değişkenin ayarlanması, bağımsız değişkeni launchSettings.json dosyasına ekler.

    --contentroot=/content-root-path
    

Yol temeli

--pathbase bağımsız değişkeni, kök olmayan bir göreli URL yoluyla yerel olarak çalıştırılan bir uygulamanın temel yolunu ayarlar (<base> etiket href, hazırlık ve canlı ortamda / dışında başka bir yola ayarlanır). Aşağıdaki örneklerde uygulamanın /relative-URL-path yol tabanı verilmiştir. Daha fazla bilgi için bkz Uygulama temel yolu.

Önemli

href <base> etiketinin sağlandığı yoldan farklı olarak, --pathbase bağımsız değişken değerini geçirirken sondaki eğik çizgiyi (/) eklemeyin. Uygulama temel yolu etikette <base> olarak <base href="/CoolApp/"> verilmişse (sondaki eğik çizgi içeriyorsa), komut satırı bağımsız değişken değerini --pathbase=/CoolApp şeklinde geçirin (sondaki eğik çizgi yok).

  • Uygulamayı yerel olarak bir komut isteminde çalıştırırken argümanı iletin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --pathbase=/relative-URL-path
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulamayı Visual Studio Hata Ayıklayıcısı ile çalıştırırken veya bir komut isteminden dotnet watch (veya dotnet run) ile kullandığınızda kullanılır.

    "commandLineArgs": "--pathbase=/relative-URL-path"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri kısmında bağımsız değişkeni belirtin. Visual Studio özellik sayfasında bağımsız değişkeni ayarlamak, bağımsız değişkeni launchSettings.json dosyasına ekler.

    --pathbase=/relative-URL-path
    

URL'ler

--urls bağımsız değişkeni, istekleri dinlemek için protokoller ve bağlantı noktalarıyla birlikte IP adreslerini veya konak adreslerini ayarlar.

  • Uygulamayı bir komut isteminde yerel olarak başlatırken bağımsız değişkeni geçirin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --urls=http://127.0.0.1:0
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulamayı Visual Studio Hata Ayıklayıcısı ile ve bir komut isteminden dotnet watch (veya dotnet run) çalıştırırken kullanılır.

    "commandLineArgs": "--urls=http://127.0.0.1:0"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri içinde bağımsız değişken belirtin. Visual Studio özellik sayfasında bağımsız değişken ayarlandığında, bu bağımsız değişken launchSettings.json dosyasına eklenir.

    --urls=http://127.0.0.1:0
    

Linux'ta barındırılan dağıtım (Nginx)

Uygulamayı, X-Forwarded-For ve X-Forwarded-Proto üst bilgilerini iletmek için ForwardedHeadersOptions ile yapılandırın. Bu yapılandırmayı ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapmak için ASP.NET Core'u proxy sunucular ve yük dengeleyicilerle çalışması için yapılandırma kılavuzundaki adımları izleyin.

Alt uygulama yolu yapılandırması da dahil olmak üzere, uygulamanın temel yolunu ayarlama hakkında daha fazla bilgi için ASP.NET Core'u Blazor barındırma ve dağıtmaya bakın.

Aşağıdaki değişikliklerle ASP.NET Core SignalR uygulamasının yönergelerini izleyin:

  • Sunucu Tarafından Gönderilen Olaylar (SSE) ayarı yalnızca için geçerli olduğundan ve uygulama istemci-sunucu etkileşimleriyle ilgili olmadığından, proxy_buffering off; proxy tamponlama yapılandırmasını kaldırın.

  • location yolunu /hubroute (location /hubroute { ... }) olan yoldan /{PATH} (location /{PATH} { ... }) olan alt uygulama yoluna değiştirin; burada {PATH} yer tutucu, alt uygulama yoludur.

    Aşağıdaki örnekte, kök yolda /isteklere yanıt veren bir uygulama için sunucu yapılandırılır:

    http {
        server {
            ...
            location / {
                ...
            }
        }
    }
    

    Aşağıdaki örnek, bir alt uygulamanın yolunu /blazor yapılandırır:

    http {
        server {
            ...
            location /blazor {
                ...
            }
        }
    }
    

Daha fazla bilgi ve yapılandırma kılavuzu için aşağıdaki kaynaklara bakın:

Kesiciyi yapılandırma

Blazor çıkış derlemelerinden gereksiz IL'yi kaldırmak için her Yayın derlemesinde Ara Dil (IL) kırpması gerçekleştirir. Daha fazla bilgi için bkz ASP.NET Core için Düzeltici'yi YapılandırmaBlazor.

Bağlayıcıyı yapılandırın

Blazor Her Yayın derlemesinde Ara Dil (IL) bağlantısı gerçekleştirerek çıkış derlemelerdeki gereksiz IL'yi kaldırır. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Bağlayıcıyı Yapılandırma.

DLL dosyalarının dosya adı uzantısını değiştirme

Bu bölüm ASP.NET Core 6.x ve 7.x için geçerlidir. .NET 8 veya sonraki sürümlerindeki ASP.NET Core'da .NET derlemeleri Webcil dosya biçimi kullanılarak WebAssembly dosyaları (.wasm) olarak dağıtılır. .NET 8 veya sonraki sürümlerde ASP.NET Core'da, bu bölüm yalnızca uygulamanın proje dosyasında Webcil dosya biçimi devre dışı bırakıldıysa geçerlidir.

Bir güvenlik duvarı, virüsten koruma programı veya ağ güvenlik gereci uygulamanın dinamik bağlantı kitaplığı (DLL) dosyalarının (.dll ) iletimini engelliyorsa, uygulamanın yayımlanan DLL dosyalarının dosya adı uzantılarını değiştirmek için bu bölümdeki yönergeleri izleyebilirsiniz.

Not

Birçok güvenlik sistemi yalnızca dosya uzantılarını denetlemek yerine uygulama dosyalarının içeriğini taradığından, uygulamanın DLL dosyalarının dosya adı uzantılarını değiştirmek sorunu çözmeyebilir.

DLL dosyalarının indirilmesini ve yürütülmesini engelleyen ortamlarda daha sağlam bir yaklaşım için .NET derlemelerini Webcil.wasmWebAssembly dosyaları () olarak paketleyen .NET 8 veya sonraki sürümlerde ASP.NET Core kullanın. Daha fazla bilgi için, bu makalenin 8.0 veya sonraki bir sürümünün .NET derlemeleri için Webcil paketleme biçimi bölümüne bakın.

Bu sorunla başa çıkmak için üçüncü taraf yaklaşımlar mevcuttur. Daha fazla bilgi için Awesome Blazorkonumundaki kaynaklara bakın.

Not

Birçok güvenlik sistemi yalnızca dosya uzantılarını denetlemek yerine uygulama dosyalarının içeriğini taradığından, uygulamanın DLL dosyalarının dosya adı uzantılarını değiştirmek sorunu çözmeyebilir.

DLL dosyalarının indirilmesini ve yürütülmesini engelleyen ortamlarda daha sağlam bir yaklaşım için aşağıdaki yaklaşımlardan birini kullanın:

  • .NET 8 veya sonraki sürümlerde, .NET derlemelerini .wasmWebcil dosya formatını kullanarak WebAssembly dosyası olarak paketleyen ASP.NET Core'u kullanın. Daha fazla bilgi için, bu makalenin 8.0 veya sonraki bir sürümünün .NET derlemeleri için Webcil paketleme biçimi bölümüne bakın.
  • .NET 6 veya sonraki sürümlerde ASP.NET Core'da özel dağıtım düzeni kullanın.

Bu sorunla başa çıkmak için üçüncü taraf yaklaşımlar mevcuttur. Daha fazla bilgi için Awesome Blazorkonumundaki kaynaklara bakın.

Uygulamayı yayımladıktan sonra, uygulamanın yayımlanan çıktısının dizinindeki .dll dosyalarını farklı bir dosya uzantısı kullanacak şekilde yeniden adlandırmak için bir kabuk betiği veya DevOps derleme işlem hattı kullanın.

Aşağıdaki örneklerde:

  • PowerShell (PS), dosya uzantılarını güncelleştirmek için kullanılır.
  • .dll dosyaları, komut satırından dosya uzantısını .bin kullanacak şekilde yeniden adlandırılır.
  • Yayımlanan blazor.boot.json dosyada .dll uzantısıyla listelenen dosyaların uzantısı .bin olarak güncellenir.
  • Hizmet çalışanı varlıkları da kullanılıyorsa, PowerShell komutu .dll dosyasında listelenen dosyaları .bin dosya uzantısına günceller.

Farklı bir dosya uzantısı kullanmak için aşağıdaki komutlarda .bin'i istediğiniz uzantıyla değiştirin.

Windows'da:

dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json

Önceki komutta {PATH} yer tutucu, yayımlanan _framework klasörünün yoludur (örneğin, .\bin\Release\net6.0\browser-wasm\publish\wwwroot\_framework projenin kök klasöründen).

Hizmet çalışanı varlıkları da kullanılıyorsa:

((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js

Yukarıdaki komutta {PATH} yer tutucu, yayımlanan service-worker-assets.js dosyanın yoludur.

Linux veya macOS'ta:

for f in {PATH}/*; do mv "$f" "`echo $f | sed -e 's/\.dll/.bin/g'`"; done
sed -i 's/\.dll"/.bin"/g' {PATH}/blazor.boot.json

Önceki komutta, {PATH} yer tutucu yayımlanan _framework klasörüne olan yoldur (örneğin, .\bin\Release\net6.0\browser-wasm\publish\wwwroot\_framework projenin kök klasöründen).

Hizmet çalışanı varlıkları da kullanılıyorsa:

sed -i 's/\.dll"/.bin"/g' {PATH}/service-worker-assets.js

Önceki komutta, {PATH} yer tutucu, yayımlanan service-worker-assets.js dosyasının yoludur.

Sıkıştırılmış blazor.boot.json.gz ve blazor.boot.json.br dosyaları ele almak için aşağıdaki yaklaşımlardan birini benimseyin:

  • Sıkıştırılmış blazor.boot.json.gz ve blazor.boot.json.br dosyaları kaldırın. Sıkıştırma bu yaklaşımla devre dışı bırakılır.
  • Güncelleştirilmiş blazor.boot.json dosyayı yeniden sıkıştırın.

Sıkıştırılmış blazor.boot.json dosyanın önceki kılavuzu, hizmet çalışanı varlıkları kullanımda olduğunda da geçerlidir. service-worker-assets.js.br ve service-worker-assets.js.gz'i kaldırın veya yeniden sıkıştırın. Aksi takdirde, dosya bütünlüğü denetimleri tarayıcıda başarısız olur.

.NET 6 için aşağıdaki Windows örneği, projenin köküne yerleştirilen bir PowerShell betiği kullanır. Sıkıştırmayı devre dışı bırakan aşağıdaki betik, dosyayı yeniden blazor.boot.json sıkıştırmak istiyorsanız daha fazla değişiklik için temel oluşturur.

ChangeDLLExtensions.ps1::

param([string]$filepath,[string]$tfm)
dir $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\blazor.boot.json
Remove-Item $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\blazor.boot.json.gz
Remove-Item $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\blazor.boot.json.br

Hizmet çalışanı varlıkları da kullanılıyorsa aşağıdaki komutları ekleyin:

((Get-Content $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\wwwroot\service-worker-assets.js
Remove-Item $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\wwwroot\service-worker-assets.js.gz
Remove-Item $filepath\bin\Release\$tfm\browser-wasm\publish\wwwroot\_framework\wwwroot\service-worker-assets.js.br

Proje dosyasında, Release yapılandırma için uygulama yayımlandıktan sonra komut dosyası yürütülür.

<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
  <Exec Command="powershell.exe -command &quot;&amp; { .\ChangeDLLExtensions.ps1 '$(SolutionDir)' '$(TargetFramework)'}&quot;" />
</Target>

Not

Aynı derlemeleri yeniden adlandırırken ve yavaş yüklerken, ASP.NET Core'daki Blazor WebAssemblyGecikmeli yük derlemeleri kılavuzuna bakın.

Genellikle, uygulamanın sunucusu güncelleştirilmiş uzantıya sahip dosyaları sunmak için statik varlık yapılandırması gerektirir. IIS tarafından barındırılan bir uygulama için, özel <mimeMap> bir dosyadaki statik içerik bölümünde (<staticContent>) yeni dosya uzantısı için bir MIME eşleme girdisi (web.config) ekleyin. Aşağıdaki örnek, dosya uzantısının .dll'den .bin'e değiştirildiğini varsayar:

<staticContent>
  ...
  <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
  ...
</staticContent>

Sıkıştırma kullanılıyorsa sıkıştırılmış dosyalar için bir güncelleştirme ekleyin:

<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />

Dosya uzantısının girdisini .dll kaldırın:

- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />

Sıkıştırma kullanılıyorsa, sıkıştırılmış dosyalar için girişleri kaldırın:

- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />

Özel web.config dosyalar hakkında daha fazla bilgi için Özel web.config dosya kullanma bölümüne bakın.

Önceki dağıtım bozulması

Genellikle kurulum sırasında

  • Yalnızca değiştirilen dosyalar değiştirilir ve bu da genellikle daha hızlı bir dağıtıma neden olur.
  • Yeni dağıtımın parçası olmayan mevcut dosyalar, yeni dağıtım tarafından kullanılmak üzere yerinde bırakılır.

Nadir durumlarda, önceki bir dağıtımda kalan dosyalar yeni bir dağıtımı bozabilir. Mevcut dağıtımın (veya dağıtımdan önce yerel olarak yayımlanan uygulamanın) tamamen silinmesi, bozuk bir dağıtımla ilgili sorunu çözebilir. Genellikle, var olan dağıtımı bir kez silmek, DevOps derlemesi ve dağıtım işlem hattı da dahil olmak üzere sorunu çözmek için yeterlidir.

DevOps derleme ve dağıtım işlem hattı kullanımdayken her zaman önceki bir dağıtımı temizlemenin gerekli olduğunu belirlerseniz, bozulmanın tam nedenini giderene kadar derleme işlem hattına geçici olarak bir adım ekleyerek her yeni dağıtımın önceki dağıtımını silebilirsiniz.

Bütünlük denetimi hatalarını çözme

Bir uygulamanın başlangıç dosyalarını indirdiğinde Blazor WebAssembly , tarayıcıya yanıtlar üzerinde bütünlük denetimleri gerçekleştirmesini belirtir. Blazor DLL (.dll), WebAssembly (.wasm) ve diğer dosyalar için, istemcilerde önbelleğe alınmayan blazor.boot.json dosyasındaki SHA-256 karma değerlerini gönderir. Önbelleğe alınan dosyaların dosya karmaları, dosyadaki blazor.boot.json karmalarla karşılaştırılır. Eşleşen karma içeren dosyalar için Blazor önbellekteki dosyaları kullanır. Aksi takdirde, dosyalar sunucudan istenir. Bir dosya indirildikten sonra karma değeri bütünlük doğrulaması için yeniden denetlenecektir. İndirilen herhangi bir dosyanın bütünlük denetimi başarısız olursa tarayıcı tarafından bir hata oluşturulur.

Blazor'nin dosya bütünlüğünü yönetme algoritması:

  • Kullanıcının uygulama dosyalarını indirme işlemi sırasında web sunucunuza yeni bir dağıtım uygulanması gibi, uygulamanın tutarsız bir dosya kümesini yükleme riskini almamasını sağlar. Tutarsız dosyalar hatalı çalışan bir uygulamaya neden olabilir.
  • Kullanıcının tarayıcısının hiçbir zaman tutarsız veya geçersiz yanıtları önbelleğe almamasını sağlar. Bu, kullanıcı sayfayı el ile yenilese bile uygulamanın başlatılmasını engelleyebilir.
  • Beklenen SHA-256 karmaları değişene kadar yanıtları önbelleğe alma ve sunucu tarafı değişikliklerini denetlememenizi güvenli hale getirir, böylece sonraki sayfa yüklemeleri daha az istek içerir ve daha hızlı tamamlanır.

Web sunucusu beklenen SHA-256 karmalarıyla eşleşmeyen yanıtlar döndürürse, tarayıcının geliştirici konsolunda aşağıdaki örneğe benzer bir hata görüntülenir:

Hesaplanan SHA-256 bütünlüğü 'IIa70iwvmEg5WiDV17OpQ5eCztNYqL186J56852RpJY=' ile 'https://myapp.example.com/_framework/MyBlazorApp.dll' kaynağının 'integrity' özniteliğinde geçerli bir özet bulunamadı. Kaynak engellendi.

Çoğu durumda, uyarı bütünlük denetimiyle ilgili bir sorun olduğunu göstermez. Bunun yerine, uyarı genellikle başka bir sorunun var olduğu anlamına gelir.

için önyükleme başvuru kaynağı olarak, GitHub deposundaki dosyasına bakın.

Not

.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dallar veya etiketler arasında geçiş yap açılır listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).

Bütünlük sorunlarını teşhis etme

Bir uygulama oluşturulduğunda, oluşturulan blazor.boot.json bildirim, derleme çıkışının üretildiği sırada önyükleme kaynaklarının SHA-256 hash'lerini tanımlar. Içindeki SHA-256 karmaları tarayıcıya teslim edilen dosyalarla blazor.boot.json eşleştiği sürece bütünlük denetimi geçer.

Bunun başarısız olmasının yaygın nedenleri şunlardır:

  • Web sunucusunun yanıtı, tarayıcının istediği dosya yerine bir hatadır (örneğin, 404 - Bulunamadı veya 500 - İç Sunucu Hatası). Bu, tarayıcı tarafından yanıt hatası olarak değil bütünlük denetimi hatası olarak bildirilir.
  • Dosyaların derlemesi ve tarayıcıya teslimi arasında dosyaların içeriğini değiştiren bir şey var. Bu durum oluşabilir:
    • Siz veya derleme araçları derleme çıktısını el ile değiştirirseniz.
    • Dağıtım işleminin bazı yönleri dosyaları değiştirdiyse. Örneğin, Git tabanlı dağıtım mekanizması kullanıyorsanız, Windows'da dosya işleyip Bunları Linux'ta kullanıma alırsanız Git'in Windows stili satır sonlarını saydam bir şekilde Unix stili satır sonlarına dönüştürdüğünü unutmayın. Dosya satırı sonlarının değiştirilmesi SHA-256 karmalarını değiştirir. Bu sorunu önlemek için derleme yapıtlarını dosya olarak işlemek amacıyla .gitattributes kullanmayı göz önünde bulundurunbinary.
    • Web sunucusu, dosya içeriğini sunmanın bir parçası olarak değiştirir. Örneğin, bazı içerik dağıtım ağları (CDN'ler) HTML'yi otomatik olarak küçültmeyi dener ve bu şekilde değiştirir. Bu tür özellikleri devre dışı bırakmanız gerekebilir.
  • Dosya blazor.boot.json düzgün yüklenemedi veya istemcide yanlış önbelleğe alınmış. Yaygın nedenler şunlardan birini içerir:
    • Yanlış yapılandırılmış veya hatalı çalışan özel geliştirici kodu.
    • Bir veya daha fazla yanlış yapılandırılmış ara önbelleğe alma katmanı.

Sizin durumunuzda bunlardan hangisinin geçerli olduğunu tanılamak için:

  1. Hata iletisini okuyarak hangi dosyanın hatayı tetiklediğine dikkat edin.
  2. Tarayıcınızın geliştirici araçlarını açın ve Ağ sekmesine bakın. Gerekirse, istek ve yanıt listesini görmek için sayfayı yeniden yükleyin. Bu listede hatayı tetikleyen dosyayı bulun.
  3. Yanıttaki HTTP durum kodunu denetleyin. Sunucu 200 - Tamam (veya başka bir 2xx durum kodu) dışında herhangi bir şey döndürürse tespit etmeniz gereken bir sunucu tarafı sorununuz vardır. Örneğin, durum kodu 403 yetkilendirme sorunu olduğu, durum kodu 500 ise sunucunun belirtilmeyen bir şekilde başarısız olduğu anlamına gelir. Uygulamayı tanılamak ve düzeltmek için sunucu tarafı günlüklerine başvurun.
  4. Durum kodu 200 - Kaynak için Tamam ise, tarayıcının geliştirici araçlarında yanıt içeriğine bakın ve içeriğin beklenen verilerle eşleşip eşleşmediğini denetleyin. Örneğin, sık karşılaşılan bir sorun, isteklerin diğer dosyalar için bile verilerinizi index.html döndürmesi için yönlendirmeyi yanlış yapılandırmaktır. İsteklere .wasm verilen yanıtların WebAssembly ikilileri olduğundan ve isteklere verilen .dll yanıtların .NET derleme ikili dosyaları olduğundan emin olun. Aksi takdirde, tanılamanız gereken bir sunucu tarafı yönlendirme sorununuz vardır.
  5. Bütünlük sorunlarını giderme PowerShell betiğini kullanarak uygulamanın yayımlanan ve dağıtılan çıkışını doğrulayın.

Sunucunun makul şekilde doğru veriler döndürdüğünü onaylarsanız, dosyanın derlemesi ve teslimi arasında içeriği değiştiren başka bir şey olmalıdır. Bunu araştırmak için:

  • Derleme araç zincirini ve dağıtım mekanizmasını, dosyalar oluşturulduktan sonra dosyaları değiştirip değiştirmediklerini inceleyin. Bunun bir örneği, Git'in daha önce açıklandığı gibi dosya satırı sonlarını dönüştürmesidir.
  • Yanıtları dinamik olarak değiştirmeye (örneğin, HTML'yi küçültmeye çalışma) ayarlanmış olma ihtimaline karşı web sunucusunu veya CDN yapılandırmasını inceleyin. Web sunucusunun HTTP sıkıştırması (örneğin, döndüren content-encoding: br veya content-encoding: gzip) uygulaması sorun değildir, çünkü bu durum sıkıştırmadan sonra sonucu etkilemez. Ancak, web sunucusunun sıkıştırılmamış verileri değiştirmesi uygun değildir .

Bütünlük sorunlarını giderme PowerShell betiği

integrity.ps1 Yayımlanan ve dağıtılan Blazor bir uygulamayı doğrulamak için PowerShell betiğini kullanın. Uygulamanın Blazor çerçeve tarafından tanımlanamayan bütünlük sorunları olduğunda başlangıç noktası olarak PowerShell Core 7 veya üzeri için betik sağlanır. PowerShell'in 7.2.0 sürümünden sonraki bir sürümde çalışıyor olması da dahil olmak üzere, uygulamalarınız için betiğin özelleştirilmesi gerekebilir.

Betik, bütünlük karmaları içeren farklı bildirimlerdeki sorunları tespit etmek için publish klasöründeki ve dağıtılan uygulamadan indirilen dosyaları kontrol eder. Bu denetimler en yaygın sorunları algılamalıdır:

  • Yayımlanan çıktıdaki bir dosyayı farkında olmadan değiştirdiniz.
  • Uygulama dağıtım hedefine doğru dağıtılmadı veya dağıtım hedefinin ortamında bir şey değiştirildi.
  • Dağıtılan uygulama ile uygulamayı yayımlama çıktısı arasında farklar vardır.

PowerShell komut kabuğunda aşağıdaki komutu kullanarak betiği çağırın:

.\integrity.ps1 {BASE URL} {PUBLISH OUTPUT FOLDER}

Aşağıdaki örnekte, https://localhost:5001/ adresindeki yerel olarak çalışan bir uygulamada betik yürütülür:

.\integrity.ps1 https://localhost:5001/ C:\TestApps\BlazorSample\bin\Release\net6.0\publish\

Yer tutucular:

  • {BASE URL}: Dağıtılan uygulamanın URL'si. Sondaki eğik çizgi (/) gereklidir.
  • {PUBLISH OUTPUT FOLDER}: Uygulamanın publish dağıtım için yayımlandığı klasörün veya konumun yolu.

Not

GitHub deposunu dotnet/AspNetCore.Docs klonlarken betik Bitdefender integrity.ps1 veya sistemde bulunan başka bir virüs tarayıcısı tarafından karantinaya alınmış olabilir. Dosya genellikle bir virüs tarayıcısının buluşsal tarama teknolojisi tarafından tuzağa düşürülür ve bu teknoloji yalnızca kötü amaçlı yazılım varlığını gösterebilecek dosyalarda desenleri arar. Virüs tarayıcısının dosyayı karantinaya almasını önlemek için, depoyu kopyalamadan önce virüs tarayıcısına bir istisna ekleyin. Aşağıdaki örnek, Windows sistemindeki komut dosyasının tipik bir dizin yoludur. Yolu diğer sistemler için gerektiği gibi ayarlayın. Yer tutucu {USER}, kullanıcının yol bölümüdür.

C:\Users\{USER}\Documents\GitHub\AspNetCore.Docs\aspnetcore\blazor\host-and-deploy\webassembly\_samples\integrity.ps1

Uyarı: Virüs tarayıcısı özel durumlarının oluşturulması tehlikelidir ve yalnızca dosyanın güvenli olduğundan emin olduğunuzda gerçekleştirilmelidir.

Bir dosyanın sağlama toplamını geçerli bir sağlama toplamı değeriyle karşılaştırmak, dosya güvenliğini garanti etmez, ancak bir dosyayı sağlama toplamı değerini koruyacak şekilde değiştirmek kötü amaçlı kullanıcılar için önemsiz değildir. Bu nedenle checksum'lar genel bir güvenlik yaklaşımı olarak kullanışlıdır. Yerel integrity.ps1 dosyanın özet değerini aşağıdaki değerlerden biriyle karşılaştırın.

  • SHA256: 32c24cb667d79a701135cb72f6bae490d81703323f61b8af2c7e5e5dc0f0c2bb
  • MD5: 9cee7d7ec86ee809a329b5406fbf21a8

Windows işletim sisteminde dosyanın sağlama toplamını aşağıdaki komutla alın. {PATH AND FILE NAME} yer tutucusu için yolu ve dosya adını belirtin ve {SHA512|MD5} yer tutucusu için üretilecek olan sağlama toplamı türünü, SHA256 veya MD5 olarak belirtin:

CertUtil -hashfile {PATH AND FILE NAME} {SHA256|MD5}

Sağlama toplamı doğrulamasının ortamınızda yeterince güvenli olmadığı konusunda endişeleriniz varsa, rehberlik için kuruluşunuzun güvenlik liderliğine başvurun.

Daha fazla bilgi için bkz. Microsoft Defender Virüsten Koruma tarafından tehdit korumasına genel bakış.

PWA olmayan uygulamalar için bütünlük denetimini devre dışı bırakma

Çoğu durumda, bütünlük denetimini devre dışı bırakmayın. Bütünlük denetiminin devre dışı bırakılması, beklenmeyen yanıtlara neden olan ve daha önce listelenen avantajların kaybolmasına neden olan temel sorunu çözmez.

Web sunucusunun tutarlı yanıtlar döndürmeye dayanamayabileceği durumlar olabilir ve temel alınan sorun çözülene kadar bütünlük denetimlerini geçici olarak devre dışı bırakmaktan başka seçeneğiniz olmayabilir.

Bütünlük denetimlerini devre dışı bırakmak için, aşağıdakileri uygulamanın proje dosyasındaki bir özellik grubuna ekleyin Blazor WebAssembly (.csproj):

<BlazorCacheBootResources>false</BlazorCacheBootResources>

BlazorCacheBootResources, Blazor'nin, .dll, .wasm ve diğer dosyaları SHA-256 karmalarına göre önbelleğe alma varsayılan davranışını da devre dışı bırakır, çünkü bu özellik, SHA-256 karmalarının doğruluğuna güvenilemeyeceğini belirtir. Bu ayarda bile tarayıcının normal HTTP önbelleği bu dosyaları önbelleğe almaya devam edebilir, ancak bunun olup olmaması web sunucusu yapılandırmanıza ve cache-control hizmet veren üst bilgilere bağlıdır.

Not

özelliği, BlazorCacheBootResources Aşamalı Web Uygulamaları (PWA) için bütünlük denetimlerini devre dışı bırakmaz. PWA'larla ilgili yönergeler için PWA'lar için bütünlük denetimini devre dışı bırakma bölümüne bakın.

Bütünlük denetimini devre dışı bırakmanın gerekli olduğu senaryoların kapsamlı bir listesini sağlayamıyoruz. Sunucular, isteği çerçevenin kapsamı Blazor dışında rastgele yollarla yanıtlayabilir. Çerçeve, uygulamanın sağlayabilecekleri BlazorCacheBootResources bütünlük garantisini kaybetme pahasına uygulamayı çalıştırılabilir hale getirme ayarını sağlar. Yine, özellikle üretim dağıtımları için bütünlük denetimini devre dışı bırakmanızı önermiyoruz. Geliştiriciler, bütünlük denetiminin başarısız olmasına neden olan temel bütünlük sorununu çözmeye çalışmalıdır.

Bütünlük sorunlarına neden olabilecek birkaç genel durum şunlardır:

  • Bütünlüğün denetlenemez olduğu HTTP üzerinde çalışıyor.
  • Dağıtım işleminiz herhangi bir şekilde yayınlandıktan sonra dosyaları değiştiriyorsa.
  • Konağınız dosyaları herhangi bir şekilde değiştirirse.

PWA'lar için bütünlük denetimini devre dışı bırakma

Blazor'nin Aşamalı Web Uygulaması (PWA) şablonu, uygulama dosyalarını çevrimdışı kullanım için getirmek ve depolamaktan sorumlu olan önerilen service-worker.published.js bir dosya içeriyor. Bu, normal uygulama başlatma mekanizmasından ayrı bir işlemdir ve kendi ayrı bütünlük denetimi mantığına sahiptir.

Dosyanın içinde service-worker.published.js aşağıdaki satır bulunur:

.map(asset => new Request(asset.url, { integrity: asset.hash }));

Bütünlük denetimini devre dışı bırakmak için, satırı aşağıdaki şekilde değiştirerek parametresini kaldırın integrity :

.map(asset => new Request(asset.url));

Bütünlük denetiminin devre dışı bırakılması, bütünlük denetimi tarafından sunulan güvenlik garantilerini kaybetmeniz anlamına gelir. Örneğin, yeni bir sürümü dağıttığınız anda kullanıcının tarayıcısı uygulamayı önbelleğe alırsa, eski dağıtımdaki bazı dosyaları ve yeni dağıtımdaki bazı dosyaları önbelleğe alma riski vardır. Böyle bir durumda uygulama, siz daha fazla güncelleştirme dağıtana kadar bozuk durumda takılır.