程序化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;

它工作,但我找不到在哪里给代理凭据使用程序集。

谢谢。

程序化web服务代理类的代理凭证

@ 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;
}

希望有帮助。

欢呼