public class DynamicProxy
{
public DynamicProxy(Uri uri)
{
this.uri = uri;
ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;
}
private Uri uri = null;
public string serviceName;
public Assembly proxyAssembly;
private ServiceDescription serviceDesc;
public ServiceDescription ServiceDescription
{
get {
if (serviceDesc == null)
{
serviceDesc = GetServiceDescription();
}
return serviceDesc;
}
}
private ServiceDescription GetServiceDescription()
{
if (uri == null) return null;
WebRequest webReq = WebRequest.Create(uri);
Stream reqStrm = webReq.GetResponse().GetResponseStream();
return ServiceDescription.Read(reqStrm);
}
public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if ((sslPolicyErrors == SslPolicyErrors.None) ||
((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors) ||
((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) == SslPolicyErrors.RemoteCertificateNameMismatch) ||
((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == SslPolicyErrors.RemoteCertificateNotAvailable))
return true;
return false;
}
public MethodInfo[] GetWebMethods()
{
serviceName = this.ServiceDescription.Services[0].Name;
if (proxyAssembly == null)
{
proxyAssembly = GenerateProxyAssembly();
if (proxyAssembly == null)
throw new InvalidOperationException("Unable to generate the proxy assembly.");
}
//Use reflection to find the methods on the service requested by the user
Type service = proxyAssembly.GetType(serviceName);
return service.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.IgnoreCase |
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public);
}
private Assembly GenerateProxyAssembly()
{
//Import the information about the service
ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
servImport.AddServiceDescription(this.ServiceDescription, String.Empty, String.Empty);
servImport.ProtocolName = "Soap";
servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
//Set up to generate the code
CodeNamespace ns = new CodeNamespace();
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(ns);
ServiceDescriptionImportWarnings warnings = servImport.Import(ns, ccu);
//If we didn't find any methods there will be nothing to call later so just stop now.
if ((warnings == ServiceDescriptionImportWarnings.NoCodeGenerated) ||
(warnings == ServiceDescriptionImportWarnings.NoMethodsGenerated)) return null;
CSharpCodeProvider prov = new CSharpCodeProvider();
//Generate the code
StringWriter sw = new StringWriter(CultureInfo.CurrentCulture);
prov.GenerateCodeFromNamespace(ns, sw, null);
//Create the assembly
CompilerParameters param = new CompilerParameters(new String[] { "System.dll", "System.Xml.dll", "System.Web.Services.dll", "System.Data.dll" });
param.GenerateExecutable = false;
param.GenerateInMemory = false;
param.TreatWarningsAsErrors = false;
param.WarningLevel = 4;
CompilerResults results = new CompilerResults(null);
results = prov.CompileAssemblyFromSource(param, sw.ToString());
return results.CompiledAssembly;
}
}相关推荐
DBeaver 的 PostgreSQL 驱动包默认存储位置
DBeaver中PostgreSQL驱动默认路径指南 在Windows系统中,DBeaver的PostgreSQL JDBC驱动默认存储在: C:\Users\[用户名]\AppData\Roaming\DBeaverData\drivers(需显示隐藏文件夹)。驱动文件通常位于maven\postgresql子目录,如postgresql-42.7.5.jar。 操作提示: 通过DBeaver首选项→驱动可查看/修改路径 手动添加驱动:在驱动管理器中替换为下载的JAR文件 离线使用时可直接复制整个driv
浅析DispatchProxy动态代理AOP
浅析DispatchProxy动态代理AOP(代码源码) 最近学习了一段时间Java,了解到Java实现动态代理AOP主要分为两种方式JDK、CGLIB,我之前使用NET实现AOP切面编程,会用Filter拦截器、Attribute特性、中间件、继承父类重写父类方法。 经过查找资料接触到了(牛逼不分先后) DispatchProxy抽象类源码地址 Dora开源地址 castleproje...
告别DBeaver驱动红叉:一份针对MySQL、PostgreSQL等常见数据库的离线驱动包手动安装指南
本文提供了一份详细的DBeaver离线驱动包手动安装指南,特别针对MySQL、PostgreSQL等常见数据库在内网环境中的驱动配置问题。通过官方下载渠道获取驱动文件,并逐步指导如何在DBeaver中手动添加和配置驱动,解决常见的驱动错误和连接失败问题,适用于企业级开发环境。
解决fidder一直报“The sever(XXX) presented a certificate that did not validate,....”
配置好fiddler的代理,进行抓包时,一直弹出提示: The sever(XXX) presented a certificate that did not validate,due to RemoteCertificateChainError。如下图: 这个提示是关于证书的,只有使用HTTPS协议的才会用证书,自然对应的配置也在HTTPS页签,对应配置如下: Tools--》Options--》HTTPS 勾选“Ignore server certificate errors(unsafe)
DBeaver连接华为GaussDB实战:从驱动配置到成功连接
本文提供了一份详细的DBeaver连接华为GaussDB的实战指南。文章从驱动配置入手,重点讲解如何获取并使用华为官方JDBC驱动,逐步演示在DBeaver中创建驱动定义和数据库连接的全过程,并分享了连接测试、参数优化及常见错误的排坑技巧,帮助开发者快速稳定地连接GaussDB进行数据操作。
DBeaver连接华为GaussDB实战指南:从驱动配置到成功连接
本文提供了一份详细的DBeaver连接华为GaussDB实战指南。文章从工具选择理由讲起,逐步指导用户完成驱动下载、DBeaver安装、核心驱动配置以及连接测试等关键步骤,并分享了连接成功后的进阶使用技巧与常见问题排查方法,旨在帮助用户高效、稳定地管理GaussDB数据库。
【原创】HttpClient访问“不可靠”Https时错误处理
但,使用HttpClient访问不合法的https站点,如直接使用IP地址访问,则出现异常。使用HttpClient访问带有合法证书的https站点,正常。使用HttpClient访问http站点,正常。这样,就不再报异常了。
手把手教你解决DBeaver连接PostgreSQL的‘org.postgresql.Driver’报错(附最新驱动下载)
本文详细指导如何解决DBeaver连接PostgreSQL时出现的‘org.postgresql.Driver’报错问题。从错误原因分析到获取最新驱动,再到DBeaver中的驱动配置和常见问题排查,提供一站式解决方案,帮助用户快速恢复数据库连接。
c#获取ssl证书有效性_问题SSL证书C#
在我的C#应用程序中,我必须通过https调用Web服务并使用我已经拥有的.crt文件进行验证.以下是满足此类需求的正确解决方案.我得到一个有效的解决方案后,我已经更新了这篇文章,认为它可能会帮助像我这样的人.解决方案以下代码必须在整个应用程序执行中只执行一次.有了这个,我们设置ServerCertification和SSL属性,每当调用reqest时将使用它们:public static v...
DBeaver连接PostgreSQL避坑指南:解决JDBC驱动版本不兼容问题(附最新驱动下载)
本文是DBeaver连接PostgreSQL的实战指南,重点解决因JDBC驱动版本不兼容导致的常见连接失败问题,如SCRAM认证错误。文章详细解析了驱动版本选择策略、离线环境部署方法、关键连接参数调优,并揭示了可能禁用数据库并行查询的客户端设置陷阱,帮助用户实现稳定高效的数据连接与管理。
手把手教你解决DBeaver连接PostgreSQL的‘Driver Class Not Found’报错(附最新驱动下载)
本文详细解析了DBeaver连接PostgreSQL时常见的‘Driver Class Not Found’报错问题,提供了从错误诊断到解决方案的完整指南。内容包括驱动版本兼容性分析、最新驱动下载与配置步骤,以及高级排查技巧,帮助开发者快速解决数据库连接问题并提升稳定性。
c#采用https访问Web服务器的方法
1 基本编程方法:1 基本编程方法: using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Threading;using I
从PostgreSQL迁移到GaussDB?手把手教你用DBeaver搞定两种驱动(org.postgresql vs com.huawei.gaussdb)的配置与切换
本文详细介绍了从PostgreSQL迁移到GaussDB时,如何在DBeaver中配置和切换两种驱动(org.postgresql vs com.huawei.gaussdb)。通过对比两种驱动的适用场景、性能差异及配置步骤,帮助开发者高效完成数据库迁移,并充分利用GaussDB的特有功能。
手把手教你解决DBeaver连接PostgreSQL的驱动报错:从下载到配置的保姆级指南
本文提供了一份详细的DBeaver连接PostgreSQL驱动报错解决方案,从错误分析到驱动下载、配置全流程指南。涵盖驱动版本选择、DBeaver配置步骤及常见问题排查,帮助开发者快速解决'can't load driver class'错误,实现稳定连接。
告别驱动烦恼:DBeaver通用驱动管理保姆级教程(以MySQL/PostgreSQL为例)
本文详细介绍了DBeaver通用驱动管理的核心原理与实战技巧,涵盖MySQL和PostgreSQL驱动的配置、维护及企业级解决方案。通过内置库安装、手动添加驱动和Maven仓库集成等多种方法,帮助开发者高效管理数据库驱动,解决常见的驱动加载问题,提升工作效率。
aopb_密码破解
一个密码破解软件功能强大,操作比aopr(一款专门破解office办公密码的ruanjian),archpr(一款破解压缩包密码的软件)都较复杂,但是功能更强大,在网上这个是要收费的
别再手动配驱动了!DBeaver 23.1.2 一键连接华为GaussDB的保姆级教程
本文详细介绍了如何使用DBeaver 23.1.2创建可复用的GaussDB连接模板,帮助开发者告别手动配置驱动的繁琐。通过驱动管理器功能,用户可以一键连接华为GaussDB,提升工作效率并确保配置一致性。文章还涵盖了多版本驱动管理和常见问题排查,适用于频繁连接多个GaussDB实例的场景。
图像去模糊(二)——Richardson–Lucy算法
Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)
1755



被折叠的 条评论
为什么被折叠?



