• wcf 代理实例


    通过过代理调用 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<T>(); } 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<T>() { 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<T>() { 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
        {
            /// <summary>
            /// 代理地址
            /// </summary>
            public string ProcyAdress { get; set; }
    
            /// <summary>
            /// EndpointAddress
            /// </summary>
            public string EndpointAddress { get; set; }
        }
  • 相关阅读:
    设置圆角代码
    队列组的简单使用
    多线程的延时执行和一次性代码
    GCD线程间的通信
    GCD"牛逼的中枢调度器"
    线程间的通信
    KVO运行时
    iOS Programming Localization 本地化
    iOS Programming State Restoration 状态存储
    如何安装sql server2005 windows 8
  • 原文地址:https://www.cnblogs.com/cicada/p/10868078.html
Copyright © 2020-2023  润新知