zoukankan      html  css  js  c++  java
  • 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; }
        }
  • 相关阅读:
    Ubuntu之修改用户名和主机名
    HM中CU,TU的划分
    BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)
    Introducing Regular Expressions 学习笔记
    kubuntu添加windows字体
    WISE安装程序增加注册控制
    Linux内核中常见内存分配函数(一)
    Linux内核中常见内存分配函数(二)
    Swift现实
    Android 5.0(L) ToolBar(替代ActionBar) 现实(四)
  • 原文地址:https://www.cnblogs.com/cicada/p/10868078.html
Copyright © 2011-2022 走看看