如何通过代理连接到WCF服务

时间:2019-07-02 05:37:27

标签: c# wcf proxy

我正在尝试通过代理连接到WCF服务。代理通过登录密码进行身份验证。

我的代码是:

var proxyHost = "http://127.0.0.1:3128/";
var proxyUserName = "username";
var proxyUserPassword = "userpassword";

var apiConnectAddress = "https://remoteaddress/service.svc";

var binding = new BasicHttpBinding
{
    UseDefaultWebProxy = false,
    ProxyAddress = new Uri(proxyHost)
    Security =
    {
        Mode = BasicHttpSecurityMode.Transport,
        Transport = 
        {
            ClientCredentialType = HttpClientCredentialType.None,
            ProxyCredentialType = HttpProxyCredentialType.Basic
        }
    }
};

var client = new Client(binding, new EndpointAddress(apiConnectAddress));

client.ClientCredentials.UserName.UserName = proxyUserName;
client.ClientCredentials.UserName.Password = proxyUserPassword;

client.SomeMethod(...); // an exception occurs here

class Client : System.ServiceModel.ClientBase<T> { ... }

异常详细信息:

System.ServiceModel.ProtocolException
    HResult=0x80131500
    Message=The remote server returned an unexpected response: (407) Proxy 
    Authentication Required.
    Source=System.Private.ServiceModel
    StackTrace:
        at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
        at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
        at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
        at System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.<>c__DisplayClass1_0.<CreateGenericTask>b__0(IAsyncResult asyncResult)
        at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()

据我了解,发生异常是因为登录名和密码未传输到代理服务器。如何配置HttpBinding通过代理成功连接到服务?

PS。用.Net Core 2.2编写的应用程序

1 个答案:

答案 0 :(得分:1)

根据发问者的提示以及Github问题中所述,
github.com/dotnet/wcf/issues/1592
目前无法使用代理进行身份验证。
谢谢。