Ständiger Fehler in WcfTestClient

Seit einiger Zeit habe ich beim Starten eines WCF-Projektes aus dem Visual Studio heraus immer wieder eine Fehlermeldung die IMetadataExchange-Bereitstellung betreffend erhalten. Nach langer und verzweifelter Suche habe ich dieses Problem nun gelöst.

Erstmal zum Fehler an sich. Ich erstelle einen ganz normalen WCF-Dienst mit der Visual-Studio-Projektvorlage und drücke gleich als erstes F5. Es startet, wie erwartet, der WcfTestClient, nur dass nun als erstes folgendes Fehlerfenster erscheint:

„Der Vertrag ‚IMetatadataExchange‘ in der Clientkonfiguration…“. Was soll mir das sagen? Nach einigem googeln und probieren tauchte irgendwann das Stichwort „Azure“ auf. Ich hatte tatsächlich das Azure SDK auf meiner Maschine installiert und nun ist das Problem, dass dies eine Änderung an der machine.config vornimmt. Der folgende Abschnitt ist auf meinem Rechner dazu gekommen:

<client>
<endpoint address="" binding="netTcpRelayBinding" contract="IMetadataExchange"
name="sb" />
<metadata>
<policyImporters>
<extension type="System.ServiceModel.Channels.ContextBindingElementImporter, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
<extension type="Microsoft.ServiceBus.Description.TcpRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<extension type="Microsoft.ServiceBus.Description.HttpRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<extension type="Microsoft.ServiceBus.Description.OnewayRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</policyImporters>
<wsdlImporters>
<extension type="System.ServiceModel.Channels.ContextBindingElementImporter, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
<extension type="Microsoft.ServiceBus.Description.StandardRelayBindingImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<extension type="Microsoft.ServiceBus.Description.TcpRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<extension type="Microsoft.ServiceBus.Description.HttpRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<extension type="Microsoft.ServiceBus.Description.OnewayRelayTransportBindingElementImporter, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</wsdlImporters>
</metadata>
</client>

Aha! Azure biegt also die IMetadataExchange-Services auf netTcpRelayBinding um. Damit kann mein wsHttp-basierter Ansatz natürlich nicht viel anfangen. Meine Lösung ist nun relativ simpel. Ich kommentiere den kompletten <client>-Block aus, indem ich vor <client> ein „<!–“ und hinter </client> „–>“ setze.
Man muss nur daran denken, die Änderungen ggf. auch in den anderen machine.configs vorzunehmen. Die Ordner sind ggf:

Framework Ordner
2.0 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG
4.0 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\Config

Insgesamt gesehen hinterlässt die Vorgehensweise des Setups einen eher faden Beigeschmack. Sowas sollte MS eigentlich besser können und ich würde es gar nicht weiter erwähnen, wenn MS selbst nicht immer wieder proklamieren würde, dass man beim Setup nur in dringenden Fällen an solchen Stellen eingreifen sollte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.