wcf 代理实例
阅读原文时间:2023年07月15日阅读:1

通过过代理调用 wcf服务

using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.Threading.Tasks;

namespace wcfproxy.Common
{
public interface IProxy
{
T SetProxy();
}
public class Proxy : IProxy
{
private readonly IProxyOptions _proxyOptions;

    public Proxy(IOptionsSnapshot<IProxyOptions> proxyOptionsAccessor)  
    {  
        \_proxyOptions = proxyOptionsAccessor.Value;  
    }

    public T SetProxy<T>()  
    {  
        return GetHttpsProxy<T>();

    }  

//HTTPS 请求
private T GetHttpsProxy() {

        var bindingHttps = new BasicHttpsBinding();  
        bindingHttps.UseDefaultWebProxy = false;  
        string proxyAdress = \_proxyOptions.ProcyAdress;

        bindingHttps.ProxyAddress = new Uri(proxyAdress);//代理  
        bindingHttps.Security.Mode = BasicHttpsSecurityMode.Transport;  
        bindingHttps.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;  
        bindingHttps.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;

        var endpointAddress = new EndpointAddress(\_proxyOptions.EndpointAddress);

        var factory = new ChannelFactory<T>(bindingHttps, endpointAddress);  

//安全证书
factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new System.ServiceModel.Security.X509ServiceCertificateAuthentication();
factory.Credentials.ServiceCertificate.SslCertificateAuthentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;

        var serviceClient = (T)factory.CreateChannel();

        return serviceClient;  
    }  

//http 请求
private T GetHttpProxy() {
var binding = new BasicHttpBinding();
binding.UseDefaultWebProxy = false;

        string proxyAdress = \_proxyOptions.ProcyAdress;

        binding.ProxyAddress = new Uri(proxyAdress);//代理  
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;  
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;  
        binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;

        var endpointAddress = new EndpointAddress(\_proxyOptions.EndpointAddress);

        var factory = new ChannelFactory<T>(binding, endpointAddress);

        var serviceClient = (T)factory.CreateChannel();

        return serviceClient;  
    }

}  
public static class Util  
{

    public static void SetCertificatePolicy()  
    {  
        ServicePointManager.ServerCertificateValidationCallback

                   += RemoteCertificateValidate;  
    }

    private static bool RemoteCertificateValidate(

       object sender, X509Certificate cert,

        X509Chain chain, SslPolicyErrors error)

    {

        // trust any certificate!!!

        System.Console.WriteLine("Warning, trust any certificate");

        return true;

    }

}  

}

public class IProxyOptions
{
///

/// 代理地址 ///
public string ProcyAdress { get; set; }

    /// <summary>  
    /// EndpointAddress  
    /// </summary>  
    public string EndpointAddress { get; set; }  
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章