Ich habe einen WCF-Dienst, der in Ordnung funktioniert, wenn ich den Dienst ohne Angabe einer Bindung oder Endpunkt (es liest es aus den generierten Werten in der App.config, wenn ich die WCF über Visual Studio registriert) erstellt.WCF: Wie kann ich diese App.config-Werte programmatisch neu erstellen?
Ich habe eine einfache Methode, die den Dienstverweis zurückgibt:
return new SmsServiceReference.SmsEngineServiceClient();
Dies funktioniert ok (da die Werte aus der Konfigurations gelesen werden). Ich möchte jedoch in einer Datenbank einige dieser Werte haben (die URI zum Beispiel) und möchte so etwas tun:
Binding binding = new BasicHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress("my.uri.com/service.svc");
return new SmsServiceReference.SmsEngineServiceClient(binding,endpointAddress);
Dies funktioniert nicht. Es wird eine Ausnahme ausgelöst, wenn ich versuche, die Service-Referenz zu verwenden.
Ich vermute, dass dies daran liegt, dass meine App.config mehr Informationen hat, die die beiden Zeilen dort nicht bereitstellen (offensichtlich). Die Frage ist, wie kann ich die folgenden App.Config-Werte programmatisch replizieren?
Hier ist das Fragment meiner App.Config: (Die URI wurde geändert, um die inocent zu schützen).
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ISmsEngineService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.myuri.com/Services/Services.svc/basic"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISmsEngineService"
contract="SmsServiceReference.ISmsEngineService" name="BasicHttpBinding_ISmsEngineService" />
</client>
Dies hat den Trick gemacht. Vielen Dank. –