2011-04-05 56 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();