I know this question is old, but the solution to my application, was different to the already suggested answers. If anyone else like me still have this issue, and none of the above answers works, this might be the problem solution:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
// Configure transport security
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Windows;
binding.Security.Transport.Realm = "";
// Configure message security
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
binding.MaxReceivedMessageSize = 10485760; //10MB limit
EndpointAddress endpointAddress = new EndpointAddress(SSRSReportExecutionUrl);
//Create the execution service SOAP Client
var rsExec = new ReportExecutionServiceSoapClient(binding, endpointAddress);
if (rsExec.ClientCredentials != null)
{
rsExec.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
// rsExec.ClientCredentials.Windows.ClientCredential = clientCredentials;
rsExec.ClientCredentials.UserName.UserName = "Your PC Login USERNAME";
rsExec.ClientCredentials.UserName.Password = "Your PC Login PASSWORD";
}
//This handles the problem of "Missing session identifier"
rsExec.Endpoint.EndpointBehaviors.Add(new ReportingServicesEndpointBehavior());
await rsExec.LoadReportAsync(null, "/" + "YOUR_REPORT_FOLDER_PATH"+ "/" + "REPORT_NAME", null);
This Solution