以编程方式Web服务代理类的代理凭据

时间:2011-08-03 12:38:15

标签: c# web-services proxy wsdl assemblies

我在使用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;

它可以工作,但在使用程序集时我无法找到提供代理凭据的位置。

谢谢你们。

1 个答案:

答案 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;
}

希望它有所帮助。

干杯