Search code examples
c#.netwindowswcf

Windows WCF client with internet proxy server showing error The server committed a protocol violation. Section=ResponseStatusLine


Our team trying to create a windows application(c#) to call a WCF service using internet proxy server

Showing exception "The server committed a protocol violation. Section=ResponseStatusLine" while calling WCF service

Please give suggestion to solve this problem/any other alternative solution

//Code for creating proxy
public static DevicesServiceClient CreateProxy()
{
  var proxy = new DevicesServiceClient("BasicHttpBinding_IDevicesService");

  BasicHttpBinding binding = new BasicHttpBinding();
  binding.Security.Mode = BasicHttpSecurityMode.None;
  binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
  binding.UseDefaultWebProxy = false;
  binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", "192.168.0.20","808"));
  proxy.Endpoint.Binding = binding;

  proxy.ClientCredentials.UserName.UserName = "Username";
  proxy.ClientCredentials.UserName.Password = "Password";
}

Server stack trace:

at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
at ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at DevicesService.IDevicesService.CheckNetworkConnection(String ipAddress)

My client side code in app.config alt text

My server side code in web.config alt text


Solution

  • Code to call wcf service from windows client application using proxy server

                {
                  var proxy = new DevicesServiceClient("BasicHttpBinding_IDevicesService");
                  BasicHttpBinding binding = new BasicHttpBinding("BasicHttpBinding_IDevicesService");
                  var proxySettings = ApplicationDetails.CheckProxySettings();
    
                    Uri domainAddress;
                    var strtemp = new string[] { };
                    //WebProxy webproxy = new WebProxy();
                    var networkCredentials = new NetworkCredential();
                    if (proxySettings.ProxyServerType == "http")
                    {
                        domainAddress = new Uri(string.Format("http://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort));
                    }
                    else if (proxySettings.ProxyServerType == "https")
                    {
                        domainAddress = new Uri(string.Format("https://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort));
                    }
                    else
                    {
                        domainAddress = new Uri(string.Format("http://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort));
                    }
                    //
                    WebProxy webproxy = new WebProxy(domainAddress.ToString(), true, strtemp);
                    //
    
                    //networkCredentials.Domain = domainAddress.ToString();
                    if (proxySettings.ProxyAuthentication == "1")
                    {
                        networkCredentials.UserName = proxySettings.Username;
                        networkCredentials.Password = proxySettings.Password;
                    }
                    webproxy.Credentials = networkCredentials;
                    webproxy.BypassProxyOnLocal = false;
                    WebRequest.DefaultWebProxy = webproxy;
                    binding.UseDefaultWebProxy = true;
                    proxy.Endpoint.Binding = binding;
    
                }