<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Holger Vetter - DEVELOPERS.DE]]></title><description><![CDATA[Software Development Blog with focus on .NET, Windows, Microsoft Azure powered by daenet]]></description><link>https://developers.de/</link><image><url>https://developers.de/favicon.png</url><title>Holger Vetter - DEVELOPERS.DE</title><link>https://developers.de/</link></image><generator>Ghost 1.21</generator><lastBuildDate>Sun, 19 Apr 2026 13:10:43 GMT</lastBuildDate><atom:link href="https://developers.de/author/hvetter/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Windows 11 private store missing (business/company)]]></title><description><![CDATA[<div class="kg-card-markdown"><p>After my upgrade to Windows 11 Enterprise (from Windows 10 Enterprise) I couldn't login with my business account in the Windows 11 store to access the private store from my company (Microsoft Store for Business and Microsoft Store for Education).<br>
To fix this, navigate to your <a href="https://businessstore.microsoft.com/de-de/store/private-store">business store</a> and select</p></div>]]></description><link>https://developers.de/2021/10/26/windows-11-enterprise-store-missing/</link><guid isPermaLink="false">617811df17183176606f6c8c</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Tue, 26 Oct 2021 14:40:15 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>After my upgrade to Windows 11 Enterprise (from Windows 10 Enterprise) I couldn't login with my business account in the Windows 11 store to access the private store from my company (Microsoft Store for Business and Microsoft Store for Education).<br>
To fix this, navigate to your <a href="https://businessstore.microsoft.com/de-de/store/private-store">business store</a> and select an app there.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2021/10/27751_openStore.jpg" alt="27751_openStore"><br>
Then try to install it, Edge browser will then open your Windows 11 Store and will ask you for your business credentials.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2021/10/27753_signin_.jpg" alt="27753_signin_"><br>
After you did this, your private store is available again.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2021/10/261439_account%20added.jpg" alt="261439_account%20added"></p>
<p>Attention: When closing the app, the private store is gone again :(</p>
<p>Please read this article about the future of the private stores: <a href="https://techcommunity.microsoft.com/t5/windows-it-pro-blog/evolving-the-microsoft-store-for-business-and-education/ba-p/2569423">https://techcommunity.microsoft.com/t5/windows-it-pro-blog/evolving-the-microsoft-store-for-business-and-education/ba-p/2569423</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Project structure with own Nuget packages]]></title><description><![CDATA[<div class="kg-card-markdown"><p>We are building a project containing of several MicroServices from scratch and thought of how to organize it.</p>
<p>For each microservice we set up an own repository. Which results in the following repo structure:</p>
<ul>
<li>MicroService1</li>
<li>MicroService2</li>
<li>MicroServiceN</li>
<li>Global (for shared componenents)</li>
<li>Documentation (where wiki markdown files and images are stored)</li></ul></div>]]></description><link>https://developers.de/2020/10/29/project-structure-with-nuget-packages/</link><guid isPermaLink="false">5f8f0522d313a112883c128d</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Thu, 29 Oct 2020 18:14:19 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>We are building a project containing of several MicroServices from scratch and thought of how to organize it.</p>
<p>For each microservice we set up an own repository. Which results in the following repo structure:</p>
<ul>
<li>MicroService1</li>
<li>MicroService2</li>
<li>MicroServiceN</li>
<li>Global (for shared componenents)</li>
<li>Documentation (where wiki markdown files and images are stored)</li>
</ul>
<h1 id="repositories">Repositories</h1>
<h2 id="documentation">Documentation</h2>
<p>The documentation is done in the azure devops wiki. Files created and images uploaded are stored automatically in the <code>Documentation</code> repository.</p>
<h2 id="global">Global</h2>
<p>The <code>global</code> repository is the repo where we implement componenents which are used by all MicroServices.</p>
<h2 id="microservices">MicroServices</h2>
<p>For each MicroService there is an own repository. All MicroServices have the same project structure, because they are created from an custom Visual Studio Project Template.</p>
<ul>
<li>Service.Web</li>
<li>Service.Dal</li>
<li>Service.Entities</li>
<li>Service.Client (for calling this microservice)</li>
<li>Service.UnitTests</li>
<li>Service.IntegrationTests</li>
</ul>
<h1 id="buildsandpackages">Builds and Packages</h1>
<p>For every repository we have a build pipeline which builds the solution and runs the UnitTests. The pipeline creates package(s), too.</p>
<h2 id="global">Global</h2>
<p>The global repository has build pipeline, too. Packages from global repository are:</p>
<ul>
<li>Global.Entities (shared entities)</li>
<li>Global.System</li>
<li>Global.Client.System (Base classes for Service.Client project)</li>
</ul>
<h2 id="microservice">MicroService</h2>
<p>Then the pipeline creates 2 nuget packages, <code>Service.Entities</code> and <code>Service.Client</code>. Those will be published to the azure devops nuget feed.</p>
<h1 id="usingthepackages">Using the packages</h1>
<p>We thought about how to use packages in development and on devops build.<br>
We wanted to make sure, that you can work an your MicroService without bothering with code from for example the global packages. But still have the possibility to develop directly on the global projects directly in the MicroService solution.</p>
<h2 id="howwedidthis">How we did this?</h2>
<p>To accomplish this we added the <code>global</code> repository as a submodule to the MicroService repository.<br>
We have two solutions, one which uses the packages and one which can switch between packages and directly building against the <code>global</code> projects via the submodule.</p>
<h3 id="solutionwithglobalsubmodule">Solution with global Submodule</h3>
<p>As I described above we have a solution for working with the <code>global</code> code and building directly against it. This is done by adding a new <code>build configuration</code> to the <code>WithGlobal</code> solution.</p>
<p>Here is an example of the project xml with:</p>
<pre><code class="language-xml">&lt;ItemGroup Condition=&quot;'$(Configuration)' == 'Debug_Global'&quot;&gt;
    &lt;ProjectReference Include=&quot;..\..\Global_System\src\Service.Entities\Service.Entities.csproj&quot; /&gt;
    &lt;ProjectReference Include=&quot;..\..\Global_System\src\Service.Services.System\Service.Services.System.csproj&quot; /&gt;
    &lt;ProjectReference Include=&quot;..\..\Global_System\src\Service.Client.System\Service.Client.System.csproj&quot; /&gt;
  &lt;/ItemGroup&gt;

&lt;ItemGroup Condition=&quot;'$(Configuration)' != 'Debug_Global'&quot;&gt;
    &lt;PackageReference Include=&quot;Service.Entities&quot; Version=&quot;1.0.*&quot; /&gt;
    &lt;PackageReference Include=&quot;Service.Services.System&quot; Version=&quot;1.0.*&quot; /&gt;
    &lt;PackageReference Include=&quot;Service.Client.System&quot; Version=&quot;1.0.*&quot; /&gt;
  &lt;/ItemGroup&gt;
</code></pre>
<p>You can see the switch between project reference and nuget package. If you are using the normal solution, there is no such build cfg and the <code>Global_System</code> projects aren't in the solution at all.<br>
The <code>WithGlobal</code> solution has the <code>Global_System</code> projects referenced and has the related build config. You can easily switch between the build/debug with the packages or the projects.</p>
<p><em>Hint:</em> Maybe you recognized the <code>*</code> in the version number. This has the benefit, that the project uses the newest package. You don't need to update the packages every time a new package was build.</p>
<h1 id="recap">Recap</h1>
<p>The things described above makes working with packages easy possible. The benefit here is, you can directly work with the <code>global</code> projects. For example editing files, debugging and so on. Edited files can be checked in to the submodule, which then directly triggers an azure devops pipeline and creates a new package.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Azure DevOps - Git unauthorized after moved to other tenant]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I worked on a git repository hosted in Azure DevOps. Everything worked fine, until the DevOps was moved to another tenant.<br>
Now my git repository was broken (<code>Authentication failed</code>).</p>
<p>I deleted the whole local repository and tried to get it again.<br>
But every time I tried to clone it, git</p></div>]]></description><link>https://developers.de/2020/09/21/azure-devops-git-unauthorized-after-switched-tenant/</link><guid isPermaLink="false">5f68bc715023ae3b4c35239d</guid><category><![CDATA[devops]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Azure]]></category><category><![CDATA[git]]></category><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Mon, 21 Sep 2020 16:03:21 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I worked on a git repository hosted in Azure DevOps. Everything worked fine, until the DevOps was moved to another tenant.<br>
Now my git repository was broken (<code>Authentication failed</code>).</p>
<p>I deleted the whole local repository and tried to get it again.<br>
But every time I tried to clone it, git opened the wrong tenant login view (the old one). Instead of showing the login view for the new tenant.</p>
<p>Here is the log produced by the <code>git clone</code> command.</p>
<pre><code>PS C:\Temp&gt; git clone --recurse-submodules https://CUSTOMER@dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME
12:54:57.548715 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/bin
12:54:57.549714 git.c:444               trace: built-in: git clone --recurse-submodules https://CUSTOMER@dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME
Cloning into 'REPOSITORYNAME'...
12:54:57.564726 run-command.c:663       trace: run_command: git remote-https origin https://CUSTOMER@dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME
12:54:57.573735 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
12:54:57.574735 git.c:704               trace: exec: git-remote-https origin https://CUSTOMER@dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME
12:54:57.574735 run-command.c:663       trace: run_command: git-remote-https origin https://CUSTOMER@dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME
12:54:57.586245 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
12:54:57.713691 run-command.c:663       trace: run_command: 'git credential-manager get'
12:54:57.747220 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
12:54:57.748222 git.c:704               trace: exec: git-credential-manager get
12:54:57.748222 run-command.c:663       trace: run_command: git-credential-manager get
12:54:57.800265 ...\Common.cs:744       trace: [Main] git-credential-manager (v1.20.0) 'get'
12:54:57.844803 ...\Git\Where.cs:348    trace: [FindGitInstallations] found 1 Git installation(s).
12:54:57.848307 ...Configuration.cs:222 trace: [LoadGitConfiguration] git All config read, 12 entries.
12:54:57.894846 ...\Common.cs:85        trace: [CreateAuthentication] detecting authority type for 'https://CUSTOMER@dev.azure.com/'.
12:54:58.024191 ...uthentication.cs:223 trace: [DetectAuthority] detected 'https://dev.azure.com/CUSTOMER/' as Azure DevOps from GET response.
12:54:58.028695 ...uthentication.cs:291 trace: [DetectAuthority] tenant resource for 'https://dev.azure.com/CUSTOMER/' is {TENANTID}.
12:54:58.029195 ...uthentication.cs:359 trace: [GetAuthentication] AAD authority for tenant 'TENANTID' detected.
12:54:58.059221 ...\Common.cs:140       trace: [CreateAuthentication] authority for 'https://CUSTOMER@dev.azure.com/' is Azure Directory.
12:54:58.059221 ...\Common.cs:765       trace: [QueryCredentials] querying 'AzureDirectory' for credentials.
12:54:58.064225 ...uthentication.cs:384 trace: [GetCredentials] credentials for 'https://CUSTOMER@dev.azure.com/' found.
12:54:58.425183 ...\Common.cs:817       trace: [QueryCredentials] credentials for 'https://CUSTOMER@dev.azure.com/' found.
12:54:58.425682 ...\Common.cs:709       trace: [LogEvent] Azure Directory credentials  for 'https://CUSTOMER@dev.azure.com/' successfully retrieved.
12:54:58.685692 run-command.c:663       trace: run_command: 'git credential-manager erase'
12:54:58.714217 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
12:54:58.715218 git.c:704               trace: exec: git-credential-manager erase
12:54:58.715218 run-command.c:663       trace: run_command: git-credential-manager erase
12:54:58.763760 ...\Common.cs:744       trace: [Main] git-credential-manager (v1.20.0) 'erase'
12:54:58.807796 ...\Git\Where.cs:348    trace: [FindGitInstallations] found 1 Git installation(s).
12:54:58.811800 ...Configuration.cs:222 trace: [LoadGitConfiguration] git All config read, 12 entries.
12:54:58.848831 ...\Common.cs:85        trace: [CreateAuthentication] detecting authority type for 'https://PersonalAccessToken@dev.azure.com/'.
12:54:58.861843 ...uthentication.cs:199 trace: [DetectAuthority] 'https://dev.azure.com/CUSTOMER/' is Azure DevOps, tenant resource is {TENANTID}.
12:54:58.863844 ...uthentication.cs:359 trace: [GetAuthentication] AAD authority for tenant 'TENANTID' detected.
12:54:58.895372 ...\Common.cs:140       trace: [CreateAuthentication] authority for 'https://PersonalAccessToken@dev.azure.com/' is Azure Directory.
12:54:58.896373 ...\Common.cs:259       trace: [DeleteCredentials] deleting Azure DevOps credentials for 'https://PersonalAccessToken@dev.azure.com/'.
12:54:58.900876 ...aseSecureStore.cs:59 trace: [Delete] credentials not found for 'git:https://PersonalAccessToken@dev.azure.com/CUSTOMER'.
12:54:58.917890 run-command.c:663       trace: run_command: 'git credential-manager erase'
12:54:58.947918 exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core
12:54:58.949418 git.c:704               trace: exec: git-credential-manager erase
12:54:58.949418 run-command.c:663       trace: run_command: git-credential-manager erase
12:54:58.998460 ...\Common.cs:744       trace: [Main] git-credential-manager (v1.20.0) 'erase'
12:54:59.042498 ...\Git\Where.cs:348    trace: [FindGitInstallations] found 1 Git installation(s).
12:54:59.046501 ...Configuration.cs:222 trace: [LoadGitConfiguration] git All config read, 12 entries.
12:54:59.082534 ...\Common.cs:85        trace: [CreateAuthentication] detecting authority type for 'https://PersonalAccessToken@dev.azure.com/'.
12:54:59.221201 ...uthentication.cs:223 trace: [DetectAuthority] detected 'https://dev.azure.com/CUSTOMER/' as Azure DevOps from GET response.
12:54:59.226706 ...uthentication.cs:291 trace: [DetectAuthority] tenant resource for 'https://dev.azure.com/CUSTOMER/' is {TENANTID}.
12:54:59.227707 ...uthentication.cs:359 trace: [GetAuthentication] AAD authority for tenant 'TENANTID' detected.
12:54:59.258733 ...\Common.cs:140       trace: [CreateAuthentication] authority for 'https://PersonalAccessToken@dev.azure.com/' is Azure Directory.
12:54:59.259735 ...\Common.cs:259       trace: [DeleteCredentials] deleting Azure DevOps credentials for 'https://PersonalAccessToken@dev.azure.com/'.
12:54:59.265240 ...aseSecureStore.cs:59 trace: [Delete] credentials not found for 'git:https://PersonalAccessToken@dev.azure.com/CUSTOMER'.
fatal: Authentication failed for 'https://dev.azure.com/CUSTOMER/PROJECTNAME/_git/REPOSITORYNAME/'
</code></pre>
<p>I tried to delete the Cache, erase the CredentialManager from git, logout in VisualStudio and so on...but <strong>nothing worked</strong>.</p>
<h1 id="solution">Solution</h1>
<p>The solution was to delete the Credentials for this DevOps from the <code>Windows Credential Manager</code>. Then I cloned the project again and the correct tenant login view appeared.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Git Branch folder naming issues - Azure Devops]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've created several branches in azure devops these were:</p>
<ul>
<li>main</li>
<li>dev</li>
<li>dev/Task-73-GetAllPendingStorageJobs</li>
<li>Dev/Task-74-DatabaseSessionState</li>
</ul>
<p>The <code>dev/feature-2</code> branch was created to work on a specific feature in it, before merging it to dev (and then later to main).</p>
<p>You can use <code>/</code> to create a folder like structure for your</p></div>]]></description><link>https://developers.de/2020/07/29/git-branch-naming/</link><guid isPermaLink="false">5f1e9394e5afcf0f74a2d0d0</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Wed, 29 Jul 2020 11:55:36 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I've created several branches in azure devops these were:</p>
<ul>
<li>main</li>
<li>dev</li>
<li>dev/Task-73-GetAllPendingStorageJobs</li>
<li>Dev/Task-74-DatabaseSessionState</li>
</ul>
<p>The <code>dev/feature-2</code> branch was created to work on a specific feature in it, before merging it to dev (and then later to main).</p>
<p>You can use <code>/</code> to create a folder like structure for your branches. Actually folders doesn't exists in git, but many UI clients treat the slash as directory seperator. In most console git clients you will just see the whole branch name without any folder like view.</p>
<p>Now when I tried to pull the dev branch in Visual Studio it didn't work and the git log window in VS showed this error:</p>
<pre><code>From https://dev.azure.com/XX/YY/_git/ZZ
 = [up to date]      master     -&gt; origin/master
 = [up to date]      Dev/Task-73-GetAllPendingStorageJobs -&gt; origin/Dev/Task-73-GetAllPendingStorageJobs
 = [up to date]      Dev/Task-74-DatabaseSessionState -&gt; origin/Dev/Task-74-DatabaseSessionState
cannot lock ref 'refs/remotes/origin/dev': there is a non-empty directory '.git/refs/remotes/origin/dev' blocking reference 'refs/remotes/origin/dev'
 ! [new branch]      dev        -&gt; origin/dev  (unable to update local ref)
Pull operation failed.
</code></pre>
<p>This is because all branches with <code>dev/</code> conflicted with the <code>dev</code> branch on the VS git client. Maybe other clients handle this differently, because for the azure devopps UI the branch naming wasn't an issue.</p>
<p>To fix this, I just renamed <code>dev</code> branch to <code>develop</code> in devops.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Deploy Kubernetes cluster with container registry]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Before starting you need to <a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli">install</a> the Azure CLI for windows.</p>
<h1 id="deployaksacr">Deploy AKS &amp; ACR</h1>
<p>You can deploy the ACR (Azure Container Registry) before deploying the AKS (Azure Kubernetes Service):</p>
<pre><code class="language-powershell">az acr create --resource-group RESOURCEGROUP  --name myContainerRegistry007 --sku Basic
</code></pre>
<p>To deploy the aks simple run the following script. The deployment</p></div>]]></description><link>https://developers.de/2020/07/14/how-to-deploy-kubernetes-cluster/</link><guid isPermaLink="false">5fa90828fb05df384020acb9</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Tue, 14 Jul 2020 11:40:00 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Before starting you need to <a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli">install</a> the Azure CLI for windows.</p>
<h1 id="deployaksacr">Deploy AKS &amp; ACR</h1>
<p>You can deploy the ACR (Azure Container Registry) before deploying the AKS (Azure Kubernetes Service):</p>
<pre><code class="language-powershell">az acr create --resource-group RESOURCEGROUP  --name myContainerRegistry007 --sku Basic
</code></pre>
<p>To deploy the aks simple run the following script. The deployment may take 10-15 minutes.</p>
<pre><code class="language-powershell">az aks create -n myAKSCluster -g RESOURCEGROUP --generate-ssh-keys --attach-acr myContainerRegistry007
</code></pre>
<p>The <code>attach-acr</code> command creates a connection between the aks and the acr, this makes deployment of docker images from the registry possible.</p>
<p>If you want to connect the aks to the acr later or use a different acr, you can use this command:</p>
<pre><code class="language-powershell">az aks update -n myAKSCluster  -g RESOURCEGROUP --attach-acr myContainerRegistry007
</code></pre>
<h1 id="deployacrimagetoaks">Deploy ACR image to aks</h1>
<p>I've already created an docker image and pushed it to the acr. Read more about this <a href="https://docs.microsoft.com/de-de/azure/container-registry/container-registry-get-started-portal">here</a>.</p>
<p>Make sure you have the Kubernetes CLI installed, otherwise the <code>kubectl</code> command is not available.</p>
<pre><code>az aks install-cli
</code></pre>
<p>The image is basically a new ASP.NET Core Web App with the Weatherforecast sample API.</p>
<p>To deploy an web app image to aks, you basically need to create 2 things in kubernetes:</p>
<ol>
<li>the web app</li>
<li>a load balancer which handles the requests and redirect them to an aks pod.</li>
</ol>
<p>This is the yaml for the webapp:</p>
<pre><code class="language-yaml">apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerweb-deployment
  labels:
    app: containerweb-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: containerweb
  template:
    metadata:
      labels:
        app: containerweb
    spec:
      containers:
      - name: containerweb
        image: myContainerRegistry007.azurecr.io/YOURIMAGENAME:47
        ports:
        - containerPort: 80
</code></pre>
<p>and this is for the loadbalancer:</p>
<pre><code class="language-yaml"># service.yml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: containerweb-aks
  name: containerweb-aks
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 80
  selector:
    app: containerweb-deployment
  type: LoadBalancer
</code></pre>
<p>Let's start with getting the credentials from our aks:</p>
<pre><code>az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
</code></pre>
<p>Now we need to apply the <code>webapp.yaml</code> file:</p>
<pre><code>kubectl apply -f webapp.yaml
</code></pre>
<p>and afterswards the <code>loadbalancer.yaml</code>:</p>
<pre><code>kubectl apply -f loadbalancer.yaml
</code></pre>
<p>This will deploy the container and the loadbalancer.</p>
<p>Read more here: <a href="https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-application">https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-application</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Imported project target was not found- How to fix]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've opened a solution and one project failed to load because of missing depency target.<br>
The targets was <code>MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2</code> and the message in the output windows was this:</p>
<pre><code>C:\Users\xx\Source\Repos\XXVS2\XX.UI\XX.UI.csproj : error  : The imported</code></pre></div>]]></description><link>https://developers.de/2020/07/08/imported-project/</link><guid isPermaLink="false">5f0594ff112f7d377c8ba53e</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Wed, 08 Jul 2020 10:40:20 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I've opened a solution and one project failed to load because of missing depency target.<br>
The targets was <code>MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2</code> and the message in the output windows was this:</p>
<pre><code>C:\Users\xx\Source\Repos\XXVS2\XX.UI\XX.UI.csproj : error  : The imported project &quot;C:\Users\xx\Source\Repos\XXVS2\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets&quot; was not found. Confirm that the expression in the Import declaration &quot;C:\Users\xx\Source\Repos\XXVS2\\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets&quot; is correct, and that the file exists on disk.  C:\Users\xx\Source\Repos\XXVS2\XX.UI\XX.UI.csproj
</code></pre>
<p>In the project the build target file was imported via the <code>&lt;Import&gt;</code> statement.</p>
<pre><code>&lt;Import Project=&quot;$(SolutionDir)\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets&quot; /&gt;
</code></pre>
<p>The issue here is, that if Visual Studio can't find the target file VS can't load the project. But we need VS to load the project, because it's a nuget package where the target file is in. VS will only download the nuget packages for this project, if the project was loaded.<br>
To enable this, we need to add a <code>Condition</code> to the project, then VS can open it and on build it willl download the nuget packages and everything is fine.</p>
<p>Your import should look like this to successfuly load the project in VS.</p>
<pre><code>Import Project=&quot;$(SolutionDir)\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets&quot; Condition=&quot;Exists('$(SolutionDir)\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.2\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets')&quot; /&gt;
</code></pre>
<p>Source and more about this issue: <a href="https://devblogs.microsoft.com/dotnet/nuget-package-restore-issues/">https://devblogs.microsoft.com/dotnet/nuget-package-restore-issues/</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Create a simple Python package]]></title><description><![CDATA[<div class="kg-card-markdown"><p>To organize Python files in your project you can or better should place them in directories to better manage and find them.</p>
<h2 id="projectsetup">Project setup</h2>
<p>I've set up my sample class (<code>dog.py</code>) which looks like this:</p>
<pre><code class="language-python">class dog:
    '''class from https://docs.python.org/3/tutorial/classes.html'''
    def __init_</code></pre></div>]]></description><link>https://developers.de/2020/06/07/create-simple-python-package/</link><guid isPermaLink="false">5edd03be861fc510b037d527</guid><category><![CDATA[Python]]></category><category><![CDATA[package]]></category><category><![CDATA[module]]></category><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Sun, 07 Jun 2020 16:58:20 GMT</pubDate><media:content url="https://developersde.blob.core.windows.net/usercontent/2020/6/7170_python-logo%402x.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://developersde.blob.core.windows.net/usercontent/2020/6/7170_python-logo%402x.png" alt="Create a simple Python package"><p>To organize Python files in your project you can or better should place them in directories to better manage and find them.</p>
<h2 id="projectsetup">Project setup</h2>
<p>I've set up my sample class (<code>dog.py</code>) which looks like this:</p>
<pre><code class="language-python">class dog:
    '''class from https://docs.python.org/3/tutorial/classes.html'''
    def __init__(self, name):
        self.name = name
        self.tricks = []    # creates a new empty list for each dog

    def add_trick(self, trick):
        self.tricks.append(trick)
</code></pre>
<p>and my <code>app.py</code> file which looks like this:</p>
<pre><code class="language-python">import dog

dogInstance = dog.dog(&quot;Alfred&quot;)
dogInstance.add_trick(&quot;Trick1&quot;)

for dogTrick in dogInstance.tricks:
    print(dogTrick)
</code></pre>
<p>The whole folder has now 2 files.</p>
<h2 id="creatingapackage">Creating a package</h2>
<p>Let's move our <code>dog.py</code> file to a new folder named <code>animals</code>, because later we possible add a <code>cat</code> or any other animal.</p>
<p>Now our linter&amp;compiler tells us that he can't find the module <code>dog</code>.<br>
To fix this we need to create an empty files named <code>__init__.py</code> in the <code>animals</code> folder.</p>
<p>Python will thread this folder as a package (cotainer for one or more modules) and the file <code>dog.py</code> as a module.<br>
In file system terms this means:</p>
<ul>
<li>package = folder</li>
<li>module = file</li>
</ul>
<h3 id="fixingtheimport">Fixing the import</h3>
<p>Our code in <code>app.py</code> still doesn't work because the import is broken.<br>
To fix this we need to change the import from <code>import dog</code> to <code>import animals.dog</code>, because the dog module is now in the animals package.</p>
<pre><code class="language-python">import animals.dog

dogInstance = animals.dog.dog(&quot;Alfred&quot;)
dogInstance.add_trick(&quot;Trick1&quot;)

for dogTrick in dogInstance.tricks:
    print(dogTrick)
</code></pre>
<h4 id="importfrom">import from</h4>
<p><code>animals.dog.dog</code> isn't very nice to write and doesn't look good.<br>
To change this we can modify the import statement to this: <code>from animals.dog import dog</code> This tells python to only import the class <code>dog</code> from the module <code>dog</code> in package <code>animals</code>.<br>
The <code>app.py</code> file now looks like this:</p>
<pre><code class="language-python">from animals.dog import dog

dogInstance = dog(&quot;Alfred&quot;)
dogInstance.add_trick(&quot;Trick1&quot;)

for dogTrick in dogInstance.tricks:
    print(dogTrick)
</code></pre>
<p>Very nice! What do you think?</p>
</div>]]></content:encoded></item><item><title><![CDATA[Azure AppService File system]]></title><description><![CDATA[<div class="kg-card-markdown"><p>It is important to monitor your disk utilization as your application grows. If the disk quota is reached, it can have adverse effects to your application. To understand what happens you should know about the different types of files and what happens when you scale out.</p>
<h2 id="typesoffiles">Types of files</h2>
<p>There</p></div>]]></description><link>https://developers.de/2020/05/15/azure-appservice-file-system/</link><guid isPermaLink="false">5ebe70430ecf961f70a8960f</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Fri, 15 May 2020 16:33:31 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>It is important to monitor your disk utilization as your application grows. If the disk quota is reached, it can have adverse effects to your application. To understand what happens you should know about the different types of files and what happens when you scale out.</p>
<h2 id="typesoffiles">Types of files</h2>
<p>There are 3 main types of files.</p>
<h3 id="persistedfiles">Persisted files</h3>
<p>They are rooted in <code>D:\home</code> or <code>%HOME%</code> and at <code>/home</code> on linux.<br>
You can rely on these files staying there until you change them. They follow a structure which is described <a href="https://github.com/projectkudu/kudu/wiki/File-structure-on-azure">here</a>.<br>
The available space is related to your App Service Plan, see <a href="https://azure.microsoft.com/en-us/pricing/details/app-service/windows/">pricing</a>.</p>
<h3 id="temporaryfiles">Temporary files</h3>
<p>A number of common Windows locations are using temporary storage on the local machine. For instance</p>
<p><code>%APPDATA%</code> points to something like <code>D:\local\AppData</code>.<br>
<code>%TMP%</code> goes to <code>D:\local\Temp</code>.</p>
<blockquote>
<p>For Free, Shared and Consumption (Functions) sites, there is a 500MB limit for all these locations together (i.e. not per-folder).<br>
For Standard and higher plans the limit depends on the selected SKU.</p>
</blockquote>
<h3 id="machinelevelfiles">Machine level files</h3>
<p>The Web App accesses many standard windows locations like <code>%ProgramFiles%</code> and <code>%windir%</code>. These files are read only.</p>
<h2 id="scalingout">Scaling out</h2>
<h3 id="homedirectory">home directory</h3>
<p>The home directory is shared through all instances and if you write content in here, all instances will get the change.<br>
Quote from source 2:</p>
<blockquote>
<p>The home directory contains an app's content, and application code can write to it. If an app runs on multiple instances, the home directory is shared among all instances so that all instances see the same directory. So, for example, if an app saves uploaded files to the home directory, those files are immediately available to all instances.<br>
Internally, the way this works is that they are stored in Azure Storage instead of living on the local file system.</p>
</blockquote>
<h3 id="temporaryfiles">Temporary files</h3>
<p>The temporary files are different, files from instance A aren't available on instance B.</p>
<h3 id="machinelevelreadonlyfiles">Machine level read-only files</h3>
<p>These files can't be changed by users (read-only hehe). That's why we can ignore those files in a scale out scenario.</p>
<h2 id="sources">Sources</h2>
<ol>
<li><a href="https://github.com/projectkudu/kudu/wiki/Understanding-the-Azure-App-Service-file-system">https://github.com/projectkudu/kudu/wiki/Understanding-the-Azure-App-Service-file-system</a></li>
<li><a href="https://docs.microsoft.com/en-us/azure/app-service/operating-system-functionality#file-access">https://docs.microsoft.com/en-us/azure/app-service/operating-system-functionality#file-access</a></li>
</ol>
</div>]]></content:encoded></item><item><title><![CDATA[Azure Comos DB Mongo API V3.6 ConnectionString changes (retrywrites=false)]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Like in my earlier <a href="https://developers.de/2020/01/28/azure-cosmosdb/">post</a> I described that, when you copy the connectionstring from the azure portal into your application and connect with the <code>MongoDB.Driver.MongoClient</code> it will fail due to <code>retryWrites</code> issue.</p>
<p>Microsoft now changed their <code>ConnectionStrings</code> template for azure and now it includes the <code>&amp;retrywrites=false</code></p></div>]]></description><link>https://developers.de/2020/04/15/comosmos/</link><guid isPermaLink="false">5e97135f2e94623bd814757c</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Wed, 15 Apr 2020 14:18:15 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Like in my earlier <a href="https://developers.de/2020/01/28/azure-cosmosdb/">post</a> I described that, when you copy the connectionstring from the azure portal into your application and connect with the <code>MongoDB.Driver.MongoClient</code> it will fail due to <code>retryWrites</code> issue.</p>
<p>Microsoft now changed their <code>ConnectionStrings</code> template for azure and now it includes the <code>&amp;retrywrites=false</code>.</p>
<p>So now you can copy the ConnectionString from azure and use it directly with the <code>MongoClient</code>.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2020/4/151416_RetryWritesFalse.jpg" alt="151416_RetryWritesFalse"></p>
</div>]]></content:encoded></item><item><title><![CDATA[Different ways to deploy CosmosDB artefacts]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I will show you two ways to deploy azure CosmosDb artefacts.</p>
<h2 id="cosmossdksforsqlapi">Cosmos SDKs for SQL API</h2>
<p>Documentation: <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet-standard">https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet-standard</a><br>
GitHub: <a href="https://github.com/Azure/azure-cosmos-dotnet-v3">https://github.com/Azure/azure-cosmos-dotnet-v3</a><br>
Nuget: <a href="https://www.nuget.org/packages/Microsoft.Azure.Cosmos/">https://www.nuget.org/packages/Microsoft.Azure.Cosmos/</a><br>
Samples: <a href="https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage">https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.</a></p></div>]]></description><link>https://developers.de/2020/04/05/different-ways-to-deploy-cosmosdb-artefacts/</link><guid isPermaLink="false">5e7d1f70f358e91498595a2b</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Sun, 05 Apr 2020 10:28:35 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I will show you two ways to deploy azure CosmosDb artefacts.</p>
<h2 id="cosmossdksforsqlapi">Cosmos SDKs for SQL API</h2>
<p>Documentation: <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet-standard">https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet-standard</a><br>
GitHub: <a href="https://github.com/Azure/azure-cosmos-dotnet-v3">https://github.com/Azure/azure-cosmos-dotnet-v3</a><br>
Nuget: <a href="https://www.nuget.org/packages/Microsoft.Azure.Cosmos/">https://www.nuget.org/packages/Microsoft.Azure.Cosmos/</a><br>
Samples: <a href="https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage">https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage</a><br>
The SDK name maybe confuses people, but you can use this SDK for all CosmosDB APIs (Cassandra API has issues with throughput). I think they will change this soon, because the prerelease Nuget Package already is named <code>Microsoft Azure Cosmos</code>.<br>
It can do 2 things:</p>
<ol>
<li>Create CosmosDb artefacts (Db/collection/documents) - not a CosmosDb account</li>
<li>Query CosmosDb documents</li>
</ol>
<h3 id="samples">Samples</h3>
<p>Source: <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-provision-container-throughput">https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-provision-container-throughput</a></p>
<pre><code class="language-C#">//create the database with throughput
string databaseName = &quot;MyDatabaseName&quot;;
await this.cosmosClient.CreateDatabaseIfNotExistsAsync(
        id: databaseName,
        throughput: 400);
</code></pre>
<pre><code class="language-C#">// Create a container with a partition key and provision throughput of 1000 RU/s
string containerName = &quot;myContainerName&quot;;
string partitionKeyPath = &quot;/myPartitionKey&quot;;

await this.cosmosClient.GetDatabase(&quot;myDatabase&quot;).CreateContainerAsync(
    id: containerName,
    partitionKeyPath: partitionKeyPath,
    throughput: 1000);
</code></pre>
<h2 id="azurelibrariesfornet">Azure libraries for .Net</h2>
<p>GitHub: <a href="https://github.com/Azure/azure-libraries-for-net">https://github.com/Azure/azure-libraries-for-net</a><br>
Samples: <a href="https://github.com/Azure/azure-libraries-for-net/tree/master/Samples">https://github.com/Azure/azure-libraries-for-net/tree/master/Samples</a><br>
This is the general library for deploying Azure resources and can't query any documents from CosmosDb. It's can only create azure resources.<br>
Following CosmosDB artefacts can be created (+ nearly all azure artefacts):</p>
<ul>
<li>CosmosDB account</li>
<li>CosmosDB database</li>
<li>CosmosDB collection</li>
</ul>
<h3 id="samples">Samples</h3>
<p>Here you can find some samples for creating these artefacts with configured throughput: <a href="https://developers.de/2020/03/12/mongo-cosmosdb-deploy-with-throughput/">https://developers.de/2020/03/12/mongo-cosmosdb-deploy-with-throughput/</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Azure CosmosDB throughput (RU)]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Lets start with a quote from microsoft what throughput actually is:</p>
<blockquote>
<p>The cost of all database operations is normalized by Azure Cosmos DB and is expressed by Request Units (or RUs, for short). You can think of RUs per second as the currency for throughput. RUs per second is a</p></blockquote></div>]]></description><link>https://developers.de/2020/03/26/azure-cosmosdb-throughput/</link><guid isPermaLink="false">5e7d0ac9f358e91498595a2a</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Thu, 26 Mar 2020 21:29:53 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Lets start with a quote from microsoft what throughput actually is:</p>
<blockquote>
<p>The cost of all database operations is normalized by Azure Cosmos DB and is expressed by Request Units (or RUs, for short). You can think of RUs per second as the currency for throughput. RUs per second is a rate-based currency. It abstracts the system resources such as CPU, IOPS, and memory that are required to perform the database operations supported by Azure Cosmos DB.<br>
You can start with a minimum throughput of 400 RU/sec and scale up to tens of millions of requests per second or even more. Each request you issue against your Azure Cosmos container or database, such as a read request, write request, query request, stored procedures have a corresponding cost that is deducted from your provisioned throughput. If you provision 400 RU/s and issue a query that costs 40 RUs, you will be able to issue 10 such queries per second.</p>
</blockquote>
<p>Throughput can be set on several resources</p>
<ul>
<li>database</li>
<li>container (shared/dedicated)</li>
</ul>
<p>In this example I am using MongoDB. I've created a database and 2 collections (containers). The database itself doesn't produce any costs.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2020/3/262126_Unbenannt.JPG" alt="262126_Unbenannt"></p>
<p>The database was created with 500 RU, these will be shared through all collections added to the database.<br>
As you can see all databases belong to one db. The difference is that <code>shared</code> and <code>shared2</code> share the same 400RU.<br>
You can change this behaviour by creating collection with dedicated throughput.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2020/3/262117_createnewcollection.JPG" alt="262117_createnewcollection"><br>
This is how <code>dedicated</code> was created.</p>
<p>Relevant to read:<br>
<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/request-units">https://docs.microsoft.com/en-us/azure/cosmos-db/request-units</a><br>
<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-provision-database-throughput">https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-provision-database-throughput</a><br>
<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/optimize-cost-throughput">https://docs.microsoft.com/en-us/azure/cosmos-db/optimize-cost-throughput</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Deploying Azure Cosmos Mongo Collection with dedicated throughput using Fluent API]]></title><description><![CDATA[<div class="kg-card-markdown"><p>We created an application for deploying Azure Cosmos DB Accounts with Mongo-API on demand by using <code>Azure libraries for .Net</code> <a href="https://github.com/Azure/azure-libraries-for-net">https://github.com/Azure/azure-libraries-for-net</a>.<br>
For this usecase it's required to create the databases and the collections using this API, too. Otherwise the <code>MongoClient</code> will create those resources automatically if</p></div>]]></description><link>https://developers.de/2020/03/12/mongo-cosmosdb-deploy-with-throughput/</link><guid isPermaLink="false">5e691e354276e21574204fa0</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Thu, 12 Mar 2020 21:12:49 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>We created an application for deploying Azure Cosmos DB Accounts with Mongo-API on demand by using <code>Azure libraries for .Net</code> <a href="https://github.com/Azure/azure-libraries-for-net">https://github.com/Azure/azure-libraries-for-net</a>.<br>
For this usecase it's required to create the databases and the collections using this API, too. Otherwise the <code>MongoClient</code> will create those resources automatically if they don't exists. If <code>MongoClient</code> creates those resources, you can't select the throughput and this will cost you much money.</p>
<p>Here is an example how to set the <code>trhoughput</code> on <code>MongoDBCollection</code>.</p>
<pre><code class="language-csharp">MongoDBCollectionResource mongoDBCollectionResource = new MongoDBCollectionResource(collectionName);

                var mongoCollectionParams = new MongoDBCollectionCreateUpdateParameters()
                {
                    Options = new Dictionary&lt;string, string&gt;()
                    {
                    },
                    Location = region.Name,
                    Resource = mongoDBCollectionResource
                };

                    mongoCollectionParams.Options.Add(&quot;throughput&quot;, collectionThroughput.ToString());

                await azure.CosmosDBAccounts.Manager.Inner.MongoDBResources.CreateUpdateMongoDBCollectionWithHttpMessagesAsync(
                    resourceGroup,
                    accountName,
                    databaseName,
                    collectionName,
                    mongoCollectionParams);
</code></pre>
<p>The interesting part here is <code>mongoCollectionParams.Options.Add(&quot;throughput&quot;, collectionThroughput.ToString());</code>.<br>
You can use the same logic for deploying MongoDB databases through adding the <code>throughput</code> parameter.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Azure CosmosDB (Mongo) 3.6 with .NET MongoDB.Driver 2.10]]></title><description><![CDATA[<div class="kg-card-markdown"><p>When creating an <code>Azure Cosmos DB</code> with <code>Azure Cosmos DB for MongoDB API</code> V3.6 and copy the ConnectionString to your application using MongoDB.Driver (in my case 2.10) it's possible that you will see this Exception:</p>
<pre><code>MongoDB.Driver.MongoCommandException: 'Command insert failed: Retryable writes are not supported. Please</code></pre></div>]]></description><link>https://developers.de/2020/01/28/azure-cosmosdb/</link><guid isPermaLink="false">5e3045cde18d54497c179764</guid><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Tue, 28 Jan 2020 15:40:15 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>When creating an <code>Azure Cosmos DB</code> with <code>Azure Cosmos DB for MongoDB API</code> V3.6 and copy the ConnectionString to your application using MongoDB.Driver (in my case 2.10) it's possible that you will see this Exception:</p>
<pre><code>MongoDB.Driver.MongoCommandException: 'Command insert failed: Retryable writes are not supported. Please disable retryable writes by specifying &quot;retrywrites=false&quot; in the connection string or an equivalent driver specific config..'
</code></pre>
<p>If you use <code>Azure Cosmos DB for MongoDB API</code> V3.2 this error won't appear.<br>
To avoid this Exception, you have to append <code>&amp;retrywrites=false</code> to your ConnectionString.</p>
<p>Quote from <a href="https://docs.mongodb.com/manual/core/retryable-writes/">https://docs.mongodb.com/manual/core/retryable-writes/</a> :<br>
<code>The official MongoDB 4.2-compatible drivers enable Retryable Writes by default. Applications upgrading to the 4.2-compatible drivers that require retryable writes may omit the retryWrites=true option. Applications upgrading to the 4.2-compatible drivers that require disabling retryable writes must include retryWrites=false in the connection string.&quot;</code></p>
<p>Sources:<br>
<a href="https://docs.mongodb.com/manual/core/retryable-writes/">https://docs.mongodb.com/manual/core/retryable-writes/</a><br>
<a href="https://www.mongodb.com/blog/post/transactions-background-part-6-retryable-writes">https://www.mongodb.com/blog/post/transactions-background-part-6-retryable-writes</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Multipart Form Data 404 on file too large]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I stumbled about a strange behaviour on ASP.NET MVC REST API. I send an HTTP request using PostMan with a large file (form-data). Basically it's not an ASP.NET issue, the issue is IIS.<br>
The error you will see is really strange and doesn't have any hints about the</p></div>]]></description><link>https://developers.de/2019/11/28/multipart-form-data-404-on-file-too-large/</link><guid isPermaLink="false">5ddfdf2bd9702d2be4eed11c</guid><category><![CDATA[IIS]]></category><category><![CDATA[asp.net]]></category><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Thu, 28 Nov 2019 15:50:32 GMT</pubDate><media:content url="https://developersde.blob.core.windows.net/usercontent/2019/11/281550_ms-iis-color.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://developersde.blob.core.windows.net/usercontent/2019/11/281550_ms-iis-color.png" alt="Multipart Form Data 404 on file too large"><p>I stumbled about a strange behaviour on ASP.NET MVC REST API. I send an HTTP request using PostMan with a large file (form-data). Basically it's not an ASP.NET issue, the issue is IIS.<br>
The error you will see is really strange and doesn't have any hints about the real issue. You will get an HTTP 404 Error Code as response with the following text in the body: <code>The resource you are looking for has been removed, had it's name changed, or is temporarily unavailable</code>. It basically looks like a standard 404.</p>
<p>The real issue is that the file in the from-data field is too large. To make it more clear: The request and/or content length is too large.</p>
<p>To fix this you have to change 1 or 2 things.</p>
<ol>
<li>maxRequestLength (in megabyte): Set this to your desired request length.</li>
<li>maxAllowedContentLength (in byte): If you want to allow content lengths greater then 30MB, you need to modify this setting, too.</li>
</ol>
<p>Here is an example which sets both settings to approx 100MB:</p>
<pre><code class="language-XML">&lt;system.web&gt;
    &lt;compilation debug=&quot;true&quot; targetFramework=&quot;4.6.1&quot; /&gt;
    &lt;httpRuntime targetFramework=&quot;4.6.1&quot; maxRequestLength=&quot;102400&quot; /&gt;
  &lt;/system.web&gt;
  &lt;system.webServer&gt;
      &lt;security&gt;
          &lt;requestFiltering&gt;
              &lt;requestLimits maxAllowedContentLength=&quot;104857600&quot;/&gt;
          &lt;/requestFiltering&gt;
      &lt;/security&gt;
    &lt;httpProtocol&gt;
   &lt;/system.webServer&gt;
</code></pre>
<p>The 404 behaviour is documented here: <a href="https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/requestlimits/">https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/requestlimits/</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Disable running of WebJobs in App Service]]></title><description><![CDATA[<div class="kg-card-markdown"><p>In some cases you want to disable all deployed WebJobs.<br>
This is possible with the <code>WEBJOBS_STOPPED</code> = 1 setting.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2019/9/19848_webjob_stopped.JPG" alt="19848_webjob_stopped"></p>
<p>More ways to configure WebJobs in App Service settings:<br>
<a href="https://github.com/projectkudu/kudu/wiki/WebJobs">https://github.com/projectkudu/kudu/wiki/WebJobs</a></p>
</div>]]></description><link>https://developers.de/2019/09/19/disable-running-of-webjobs-in-appservice/</link><guid isPermaLink="false">5d833f99ecd6984584c01392</guid><category><![CDATA[Azure]]></category><category><![CDATA[WebJob]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Holger Vetter]]></dc:creator><pubDate>Thu, 19 Sep 2019 08:49:43 GMT</pubDate><media:content url="https://developersde.blob.core.windows.net/usercontent/2019/9/19847_webjobs.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://developersde.blob.core.windows.net/usercontent/2019/9/19847_webjobs.png" alt="Disable running of WebJobs in App Service"><p>In some cases you want to disable all deployed WebJobs.<br>
This is possible with the <code>WEBJOBS_STOPPED</code> = 1 setting.<br>
<img src="https://developersde.blob.core.windows.net/usercontent/2019/9/19848_webjob_stopped.JPG" alt="Disable running of WebJobs in App Service"></p>
<p>More ways to configure WebJobs in App Service settings:<br>
<a href="https://github.com/projectkudu/kudu/wiki/WebJobs">https://github.com/projectkudu/kudu/wiki/WebJobs</a></p>
</div>]]></content:encoded></item></channel></rss>