public void SingleServiceDefaultResolver() { var name = Create <string>(); var address = Create <Uri>().ToString(); var xml = $@" <configuration> <system.serviceModel> <services> <service name=""{name}""> <endpoint address=""{address}"" contract=""{typeof(IService).FullName}"" /> </service> </services> </system.serviceModel> </configuration>"; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(name); Assert.Equal(address, factory.Endpoint.Address.ToString()); } } }
public void CustomBindingWithTcpTransport() { var name = Create <string>(); var address = Create <Uri>().ToString(); var contract = Create <string>(); var xml = $@" <configuration> <system.serviceModel> <bindings> <customBinding> <binding name=""customName""> <tcpTransport /> </binding> </customBinding> </bindings> <services> <service name=""{name}""> <endpoint address=""{address}"" binding=""customBinding"" bindingConfiguration=""customName"" contract=""{contract}""> </endpoint> </service> </services> </system.serviceModel> </configuration>"; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { var mapper = Substitute.For <IContractResolver>(); mapper.ResolveContract(contract).Returns(typeof(IService)); mapper.ResolveDescription(typeof(IService)).Returns(ContractDescription.GetContract(typeof(IService))); builder.Services.AddSingleton <IContractResolver>(mapper); builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(name); Assert.Equal(address, factory.Endpoint.Address.ToString()); var binding = Assert.IsType <CustomBinding>(factory.Endpoint.Binding); Assert.Collection(binding.Elements, e => Assert.IsType <TcpTransportBindingElement>(e)); } } }
public void RedirectBinding() { var name = Create <string>(); var address = Create <Uri>().ToString(); var contract = Create <string>(); var xml = $@" <service name=""HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null""> <endpoint address=""http://computer:8080/Hello1"" contract=""{contract}"" binding=""basicHttpBinding"" bindingConfiguration=""shortTimeout"" /> <endpoint address=""http://computer:8080/Hello2"" contract=""{contract}"" binding=""basicHttpBinding"" bindingConfiguration=""Secure"" /> </service> <bindings> <basicHttpBinding name=""shortTimeout"" timeout=""00:00:00:01"" /> <basicHttpBinding name=""Secure""> <Security mode=""Transport"" /> </basicHttpBinding> </bindings> "; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { var mapper = Substitute.For <IContractResolver>(); mapper.ResolveContract(contract).Returns(typeof(IService)); mapper.ResolveDescription(typeof(IService)).Returns(ContractDescription.GetContract(typeof(IService))); builder.Services.AddSingleton <IContractResolver>(mapper); builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(name); Assert.Equal(address, factory.Endpoint.Address.ToString()); } } }
public void Example() { var dns = Create <string>(); var address = Create <Uri>().ToString(); var contract = Create <string>(); var xml = $@" <configuration> <system.serviceModel> <client> <endpoint address=""{address}"" binding=""basicHttpBinding"" contract=""{contract}""> <identity> <dns value=""{dns}"" /> </identity> </endpoint> </client> </system.serviceModel> </configuration>"; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { var mapper = Substitute.For <IContractResolver>(); mapper.ResolveContract(contract).Returns(typeof(IService)); mapper.ResolveDescription(typeof(IService)).Returns(ContractDescription.GetContract(typeof(IService))); builder.Services.AddSingleton <IContractResolver>(mapper); builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(); Assert.Equal(address, factory.Endpoint.Address.ToString()); var identity = Assert.IsAssignableFrom <EndpointIdentity>(Assert.Single(factory.Endpoint.EndpointBehaviors)); } } }
public void PredefinedBindings(string bindingName, Type bindingType) { var name = Create <string>(); var address = Create <Uri>().ToString(); var contract = Create <string>(); var xml = $@" <configuration> <system.serviceModel> <services> <service name=""{name}""> <endpoint address=""{address}"" contract=""{contract}"" binding=""{bindingName}"" /> </service> </services> </system.serviceModel> </configuration>"; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { var mapper = Substitute.For <IContractResolver>(); mapper.ResolveContract(contract).Returns(typeof(IService)); mapper.ResolveDescription(typeof(IService)).Returns(ContractDescription.GetContract(typeof(IService))); builder.Services.AddSingleton <IContractResolver>(mapper); builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(name); Assert.Equal(address, factory.Endpoint.Address.ToString()); Assert.Equal(bindingType, factory.Endpoint.Binding.GetType()); } } }
public void CustomBinding() { var name = Create <string>(); var address = Create <Uri>().ToString(); var contract = Create <string>(); var xml = $@" <configuration> <system.serviceModel> <bindings> <customBinding> <binding name=""customName""> <binaryMessageEncoding compressionFormat=""GZip"" /> <sslStreamSecurity requireClientCertificate=""true"" /> </binding> </customBinding> </bindings> <services> <service name=""{name}""> <endpoint address=""{address}"" binding=""customBinding"" bindingConfiguration=""customName"" contract=""{contract}""> </endpoint> </service> </services> </system.serviceModel> </configuration>"; using (var fs = TemporaryFileStream.Create(xml)) { void Configure(ServiceModelBuilder builder) { var mapper = Substitute.For <IContractResolver>(); mapper.ResolveContract(contract).Returns(typeof(IService)); mapper.ResolveDescription(typeof(IService)).Returns(ContractDescription.GetContract(typeof(IService))); builder.Services.AddSingleton <IContractResolver>(mapper); builder.AddConfigurationManagerFile(fs.Name); } using (var provider = CreateProvider(Configure)) { var factoryProvider = provider.GetRequiredService <IChannelFactoryProvider>(); var factory = factoryProvider.CreateChannelFactory <IService>(name); Assert.Equal(address, factory.Endpoint.Address.ToString()); var binding = Assert.IsType <CustomBinding>(factory.Endpoint.Binding); Assert.Collection(binding.Elements, e => { var encoding = Assert.IsType <BinaryMessageEncodingBindingElement>(e); Assert.Equal(CompressionFormat.GZip, encoding.CompressionFormat); }, e => { var ssl = Assert.IsType <SslStreamSecurityBindingElement>(e); Assert.Equal(SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12, ssl.SslProtocols); }); } } }