private static RemoteServiceProviderArgs GetSettings() { var settings = new EnterpriseImageServerServiceSettings(); return(new RemoteServiceProviderArgs(settings.BaseUrl, settings.FailoverBaseUrl, settings.ConfigurationClass, settings.MaxReceivedMessageSize, settings.CertificateValidationMode, settings.RevocationMode, settings.UserCredentialsProviderClass ) { SendTimeoutSeconds = settings.SendTimeoutSeconds }); }
/// <summary> /// Configures and returns an instance of the specified service channel factory, according to the specified arguments. /// </summary> /// <param name="args"></param> /// <returns></returns> public ChannelFactory ConfigureChannelFactory(ServiceChannelConfigurationArgs args) { var settings = new EnterpriseImageServerServiceSettings(); var binding = new WSHttpBinding { Security = { Mode = settings.SecurityMode, Message = { ClientCredentialType = args.AuthenticationRequired ? MessageCredentialType.UserName : MessageCredentialType.None } } }; binding.MaxReceivedMessageSize = args.MaxReceivedMessageSize; if (args.SendTimeoutSeconds > 0) { binding.SendTimeout = TimeSpan.FromSeconds(args.SendTimeoutSeconds); } // allow individual string content to be same size as entire message binding.ReaderQuotas.MaxStringContentLength = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); binding.ReaderQuotas.MaxArrayLength = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); //binding.ReceiveTimeout = new TimeSpan(0, 0 , 20); //binding.SendTimeout = new TimeSpan(0, 0, 10); var channelFactory = (ChannelFactory)Activator.CreateInstance(args.ChannelFactoryClass, binding, new EndpointAddress(args.ServiceUri)); channelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = args.CertificateValidationMode; channelFactory.Credentials.ServiceCertificate.Authentication.RevocationMode = args.RevocationMode; //TODO (Rockstar): remove this after refactoring to do per-sop edits foreach (var operation in channelFactory.Endpoint.Contract.Operations) { operation.Behaviors.Find <DataContractSerializerOperationBehavior>().MaxItemsInObjectGraph = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); } return(channelFactory); }
public void ConfigureServiceHost(ServiceHost host, ServiceHostConfigurationArgs args) { var settings = new EnterpriseImageServerServiceSettings(); // Per MSDN: Transport security is provided externally to WCF. If you are creating a self-hosted WCF application, you can bind an SSL certificate to the address using the HttpCfg.exe tool. // The service may appears running but client will not be able to connect. For this reason, it's best to explicitly disallow this mode. if (settings.SecurityMode == SecurityMode.Transport) { throw new Exception("Transport security is not supported. Please change EnterpriseImageServerServiceSettings.SecurityMode"); } var binding = new WSHttpBinding { MaxReceivedMessageSize = args.MaxReceivedMessageSize }; if (args.SendTimeoutSeconds > 0) { binding.SendTimeout = TimeSpan.FromSeconds(args.SendTimeoutSeconds); } binding.ReaderQuotas.MaxStringContentLength = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); binding.ReaderQuotas.MaxArrayLength = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); binding.Security.Mode = settings.SecurityMode; binding.Security.Message.ClientCredentialType = args.Authenticated ? MessageCredentialType.UserName : MessageCredentialType.None; // TransportWithMessageCredential cannot be used in conjuction with ClientCredentialType=None if (binding.Security.Mode == SecurityMode.TransportWithMessageCredential && binding.Security.Message.ClientCredentialType == MessageCredentialType.None) { throw new Exception(string.Format("TransportWithMessageCredential is not supported for '{0}' service. Please change EnterpriseImageServerServiceSettings.SecurityMode", args.ServiceContract.Name)); } // establish endpoint host.AddServiceEndpoint(args.ServiceContract, binding, ""); // expose meta-data via HTTP GET var metadataBehavior = host.Description.Behaviors.Find <ServiceMetadataBehavior>(); if (metadataBehavior == null) { metadataBehavior = new ServiceMetadataBehavior { HttpGetEnabled = true }; host.Description.Behaviors.Add(metadataBehavior); } //TODO (Rockstar): remove this after refactoring to do per-sop edits foreach (var endpoint in host.Description.Endpoints) { foreach (var operation in endpoint.Contract.Operations) { operation.Behaviors.Find <DataContractSerializerOperationBehavior>().MaxItemsInObjectGraph = (int)Math.Min(int.MaxValue, args.MaxReceivedMessageSize); } } // set up the certificate if (settings.SecurityMode == SecurityMode.Message || settings.SecurityMode == SecurityMode.TransportWithMessageCredential) { host.Credentials.ServiceCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, args.HostUri.Host); } }