2017-02-17 2 views
1

Ich habe folgendes in meiner config:Wie fügt man WCF ServiceHost programmgesteuert benutzerdefiniertes Verhalten hinzu?

<behaviors> 
<endpointBehaviors> 
     <behavior name="protoEndpointBehavior"> 
      <protobuf /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

Wie füge ich das protobuf Verhalten programmatisch statt es in der Konfigurationsdatei zu haben?

Ich habe diesen Code so weit:

ServiceHost serviceHost = null; 
       Console.WriteLine("Creating service " + serviceType.FullName); 
       serviceHost = new MyServiceHost(serviceType, uriList.Select(c => new Uri(c)).ToArray()); 

       serviceHost = new MyServiceHost(serviceType, uriList.Select(c => new Uri(c)).ToArray()); 

       if (secureConnectionSettings != null && secureConnectionSettings.Enabled) 
       { 
        Console.WriteLine("Setting certificates"); 
        X509Store store = new X509Store(secureConnectionSettings.CertificateStore, secureConnectionSettings.CertificateLocation); 
        store.Open(OpenFlags.ReadOnly); 
        X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByThumbprint, secureConnectionSettings.Thumbprint, true); 
        store.Close(); 

        if (certs.Count > 0) 
         serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, secureConnectionSettings.Thumbprint); 
        else 
         throw new Exception("Could not finde certificate with thumbprint " + secureConnectionSettings.Thumbprint); 
       } 

       var binding = CreateNetHttpBinding(); 

       var endpoint = new System.ServiceModel.Description.ServiceEndpoint(new System.ServiceModel.Description.ContractDescription("My.ServiceContracts.IMyClientService"), binding, new EndpointAddress("BinaryHttpProto")); 
       endpoint.EndpointBehaviors.Add(new ProtoBuf.ServiceModel.ProtoBehaviorExtension()); 
       serviceHost.AddServiceEndpoint(endpoint); 

Die folgende Zeile funktionieren nicht:

endpoint.EndpointBehaviors.Add(new ProtoBuf.ServiceModel.ProtoBehaviorExtension()); 
+0

Was meinst du, es funktioniert nicht? Wird eine Ausnahme ausgelöst? –

Antwort

0

Ich weiß nicht viel über diese Bibliothek, aber Sie versuchen, die hinzufügen Konfigurationserweiterungselement und nicht das tatsächliche Verhalten.

Funktioniert es, wenn Sie dies stattdessen tun?

endpoint.EndpointBehaviors.Add(new ProtoBuf.ServiceModel.ProtoEndpointBehavior()); 
+0

Vielen Dank Tomasr! – Banshee

Verwandte Themen