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());
                }
            }
        }
Example #2
0
        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));
                }
            }
        }
Example #3
0
        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));
                }
            }
        }
Example #5
0
        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());
                }
            }
        }
Example #6
0
        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);
                    });
                }
            }
        }