WCF webHttpBinding is open for  web browser and wpf
//D:\C\WcfService3\WcfService3\Web.config
<?xml version="1.0"?>
<configuration><appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /></appSettings><system.web><compilation debug="true" targetFramework="4.8" /><httpRuntime targetFramework="4.8"/></system.web><system.serviceModel><bindings><webHttpBinding><binding name="RestBinding"maxReceivedMessageSize="2147483647"maxBufferSize="2147483647"><readerQuotasmaxStringContentLength="2147483647"maxArrayLength="2147483647"/></binding></webHttpBinding>             </bindings><services><service name="WcfService3.BookService"><endpoint address=""binding="webHttpBinding"bindingConfiguration="RestBinding"behaviorConfiguration="RestBehavior"contract="WcfService3.IBookService"/></service></services><behaviors><serviceBehaviors><behavior><!-- To avoid disclosing metadata information, set the values below to false before deployment --><serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/><!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information --><serviceDebug includeExceptionDetailInFaults="false"/></behavior></serviceBehaviors><endpointBehaviors><behavior name="RestBehavior"><webHttp/></behavior></endpointBehaviors></behaviors><!--<protocolMapping><add binding="basicHttpsBinding" scheme="https" /></protocolMapping>--><serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /></system.serviceModel><system.webServer><modules runAllManagedModulesForAllRequests="true"/><!--To browse web app root directory during debugging, set the value below to true.Set to false before deployment to avoid disclosing web app folder information.--><directoryBrowse enabled="true"/></system.webServer></configuration>//D:\C\WcfService3\WcfService3\Models\Book.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Web;namespace WcfService3.Models
{[DataContract]public class Book{[DataMember]public long Id { get; set; }[DataMember]public string Name {  get; set; }[DataMember]public string ISBN { get; set;  }[DataMember]public string Author { get; set;  }[DataMember]public string Abstract {  get; set; }[DataMember]public string Comment {  get; set; }[DataMember]public string Content {  get; set; }[DataMember]public string Summary { get; set;  }[DataMember]public string Title {  get; set; }[DataMember]public string Topic {  get; set; }}
}//D:\C\WcfService3\WcfService3\IBookService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using WcfService3.Models;namespace WcfService3
{// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IBookService" in both code and config file together.
    [ServiceContract]public interface IBookService{[OperationContract]//[WebGet(UriTemplate="GetBooksList?cnt={cnt}",RequestFormat =WebMessageFormat.Json,ResponseFormat =WebMessageFormat.Json)][WebGet(UriTemplate = "GetBooksList?cnt={cnt}",ResponseFormat = WebMessageFormat.Json)]List<Book> GetBooksList(int cnt);}
}//D:\C\WcfService3\WcfService3\BookService.svc.cs
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Threading;
using WcfService3.Models;namespace WcfService3
{// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "BookService" in code, svc and config file together.// NOTE: In order to launch WCF Test Client for testing this service, please select BookService.svc or BookService.svc.cs at the Solution Explorer and start debugging.public class BookService : IBookService{static long idx = 0;private long GetIncrementIdx(){return Interlocked.Increment(ref idx);}public List<Book> GetBooksList(int cnt){List<Book> bksList = new List<Book>();for (int i = 0; i < cnt + 1; i++){long a = GetIncrementIdx();bksList.Add(new Book(){Id = a,Name = $"Name_{a}",ISBN = $"ISBN_{a}",Author = $"Author_{a}",Abstract = $"Abstract_{a}",Comment = $"Comment_{a}",Content = $"Content_{a}",Summary = $"Summary_{a}",Title = $"Title_{a}",Topic = $"Topic_{a}"});}return bksList;}}
}

 

 

http://localhost:50704/BookService.svc/getbookslist?cnt=100000

 

 

image

 

 

 

 

 

 

image

 

 

 

<Window x:Class="WpfApp24.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp24"mc:Ignorable="d"Title="MainWindow" WindowState="Maximized"><Window.DataContext><local:MainVM/></Window.DataContext><Grid><ListBox ItemsSource="{Binding BooksCollection}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="5,5"VirtualizingPanel.CacheLengthUnit="Item"ScrollViewer.IsDeferredScrollingEnabled="True"ScrollViewer.CanContentScroll="True"UseLayoutRounding="True"SnapsToDevicePixels="True"><ListBox.Resources><Style TargetType="ListBoxItem"><Setter Property="FontSize" Value="20"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="30"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></ListBox.Resources></ListBox></Grid>
</Window>using Newtonsoft.Json;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Net;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Schema;namespace WpfApp24
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}}public class MainVM : INotifyPropertyChanged{public MainVM(){string url = "http://localhost:50704/BookService.svc/getbookslist?cnt=1000000";WebClient client = new WebClient();client.DownloadStringCompleted += Client_DownloadStringCompleted;client.DownloadStringAsync(new Uri(url));}private void Client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e){var jsonStr = e.Result;BooksCollection=new ObservableCollection<Book>(JsonConvert.DeserializeObject<List<Book>>(jsonStr));}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection;}set{if(value!=booksCollection){booksCollection = value;OnPropertyChanged();}}}public event PropertyChangedEventHandler? PropertyChanged;private void OnPropertyChanged([CallerMemberName] string propName=""){var handler = PropertyChanged;handler?.Invoke(this, new PropertyChangedEventArgs(propName));}}[DataContract]public class Book{[DataMember]public long Id { get; set; }[DataMember]public string Name { get; set; }[DataMember]public string ISBN { get; set; }[DataMember]public string Author { get; set; }[DataMember]public string Abstract { get; set; }[DataMember]public string Comment { get; set; }[DataMember]public string Content { get; set; }[DataMember]public string Summary { get; set; }[DataMember]public string Title { get; set; }[DataMember]public string Topic { get; set; }public override string ToString(){return $"Id:{Id},Name:{Name},ISBN:{ISBN},Author:{Author},Comment:{Comment},Content:{Content},Summary:{Summary},Title:{Title},Topic:{Topic}";}}
}

 

 

 

 

 

 

image

 

 

 

image