程序化web服务代理类的代理凭证
本文关键字:代理 凭证 程序化 服务 web | 更新日期: 2023-09-27 18:04:27
我在使用squid代理下的WSDL以编程方式使用WebService时遇到了问题。我的应用程序是建立在c# .net。在使用以下命令导入服务描述之后,我从XML编译一个程序集:
// a namespace and compile unit are needed by importer
CodeNamespace codeNamespace = new CodeNamespace();
CodeCompileUnit codeUnit = new CodeCompileUnit();
codeUnit.Namespaces.Add(codeNamespace);
ServiceDescriptionImportWarnings importWarnings = descriptionImporter.Import(codeNamespace, codeUnit);
if (importWarnings == 0) // no warnings
{
// create a c# compiler
CodeDomProvider compiler = CodeDomProvider.CreateProvider("CSharp");
// include the assembly references needed to compile
string[] references = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
CompilerParameters parameters = new CompilerParameters(references);
// compile into assembly
CompilerResults results = compiler.CompileAssemblyFromDom(parameters, codeUnit);
foreach (CompilerError oops in results.Errors)
{
// trap these errors and make them available to exception object
throw new Exception("Compilation Error Creating Assembly");
}
// all done....
return results.CompiledAssembly;
}
else
{
// warnings issued from importers, something wrong with WSDL
throw new Exception("Invalid WSDL");
}
问题是当我调用方法Invoke(obj, args)。如果我使用外部地址(如http://My_external_ip/my_webService.asmx)调用WSDL,代理将切断连接。如果我使用内部地址调用,工作正常。
当我手动添加一个webReference时,我习惯这样做:
WebService WS = new WebService();
WS.Proxy = Proxy.credentials;
它工作,但我找不到在哪里给代理凭据使用程序集。
谢谢。
@ variety,
你可能想写一些像这样的代码
WebService WS = new WebService();
WS.Proxy = wwwproxy("http://someproxy:8080";
WebProxy wwwproxy(string ptProxyURI)
{
var aProxy = New WebProxy;
aProxy.Credentials = CredentialCache.DefaultCredentials;
aProxy.BypassProxyOnLocal = True;
aProxy.Address = New Uri(ptProxyURI);
Return aProxy;
}
希望有帮助。
欢呼