2011-08-03 103 views
3

我有問題以編程方式使用WebService,使用squid代理下的WSDL。我的應用程序是用c#.net編譯的。我編譯大會從XML,導入後使用該服務描寫的特徵:以編程方式Web服務代理類的代理憑據

// 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"); 
     } 

問題是,當我調用的方法調用(OBJ,參數)。代理切斷連接,如果我使用外部地址調用WSDL,如http://My_external_ip/my_webService.asmx。如果我打電話使用內部地址,工作正常。

當我添加Web引用,手動,我用做一些事情,如:

WebService WS = new WebService(); 
WS.Proxy = Proxy.credentials; 

它的工作,但我找不到地方使用時,大會給代理憑據。

謝謝你們。

+0

我相信這是這個問題的一個DUP:http://stackoverflow.com/questions/289601/connecting-to-an-asmx-webservice-with-wcf-through-a-proxy – ryber

+0

我嘗試將CustomBinding添加到app.config並且不起作用。在那篇文章中,所需的身份驗證是用於Web服務還是驗證進入SQUID代理? – Varois

回答

0

@Various,

您probebly想寫一些這樣的代碼

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

希望它能幫助。

乾杯