我在使用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)时。如果我使用外部地址调用WSDL,则代理会切断连接,例如http://My_external_ip/my_webService.asmx。如果我使用内部地址打电话,工作正常。
当我手动添加webReference时,我会做一些像:
WebService WS = new WebService();
WS.Proxy = Proxy.credentials;
它可以工作,但在使用程序集时我无法找到提供代理凭据的位置。
谢谢你们。
答案 0 :(得分:0)
@Various,
你可能想写一些像这样的代码
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;
}
希望它有所帮助。
干杯