2011-04-05 69 views
0

由於與我的具體情況有關的原因,我試圖儘可能地從App.Config文件中刪除。我試圖進入代碼的其中一項是與Web服務有關的信息。我從App.Config中所採取的信息,並創建了一個basicHttpBinding的類:在運行時手動添加綁定

System.ServiceModel.BasicHttpBinding dss = new System.ServiceModel.BasicHttpBinding(); 
     dss.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.None; 
     dss.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.None; 
     dss.Security.Transport.ProxyCredentialType = System.ServiceModel.HttpProxyCredentialType.None; 
     dss.Security.Transport.Realm = ""; 

     dss.Security.Message.ClientCredentialType = System.ServiceModel.BasicHttpMessageCredentialType.UserName; 

     dss.Name = "DataServiceSoap"; 
     dss.CloseTimeout = System.TimeSpan.Parse("00:01:00"); 
     dss.OpenTimeout = System.TimeSpan.Parse("00:01:00"); 
     dss.ReceiveTimeout = System.TimeSpan.Parse("00:10:00"); 
     dss.SendTimeout = System.TimeSpan.Parse("00:10:00"); 
     dss.AllowCookies = false; 
     dss.BypassProxyOnLocal = false; 
     dss.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard; 
     dss.MaxBufferSize = 655360; 
     dss.MaxBufferPoolSize = 524288; 
     dss.MaxReceivedMessageSize = 655360; 
     dss.MessageEncoding = System.ServiceModel.WSMessageEncoding.Text; 
     dss.TextEncoding = new System.Text.UTF8Encoding(); 
     dss.TransferMode = System.ServiceModel.TransferMode.Buffered; 
     dss.UseDefaultWebProxy = true; 
     dss.ReaderQuotas.MaxDepth = 32; 
     dss.ReaderQuotas.MaxStringContentLength = 8192; 
     dss.ReaderQuotas.MaxArrayLength = 16384; 
     dss.ReaderQuotas.MaxBytesPerRead = 4096; 
     dss.ReaderQuotas.MaxNameTableCharCount = 16384; 

在那之後,我創建了一個開放的指向Web服務的地址:

Uri baseAddress = new Uri("http://localservice/dataservice.asmx"); 

怎麼辦我最終添加客戶端端點地址和綁定?我是否必須開放渠道,或者是否有更容易實施的課程來照顧這個問題?

回答

3

以下是使用ChannelFactory以編程方式執行該操作的簡單方法。

 BasicHttpBinding binding = new BasicHttpBinding(); 
     EndpointAddress address = new EndpointAddress("Your uri here"); 

     ChannelFactory<IContract> factory = new ChannelFactory<IContract>(binding, address); 
     IContract channel = factory.CreateChannel(); 
     channel.YourMethod(); 
     ((ICommunicationObject)channel).Close();