[转]使用代码去描述WCF配置文件

时间:2022-09-28 16:09:27

转自:使用代码去描述WCF配置文件

在应用程序部署的时候,WCF客户端因为服务器地址的变化,需要修改程序配置文件的地址URL,手动修改很不方便,还会造成错误,所以尽量把描述WCF配置文件的配置使用代码方式进行描述,通过在软件中输入服务器IP地址的方式,动态修改访问的URL,这样比较方便,也不会出错,导致程序运行异常。

下面我将一个WCF部署文件采用代码方式描述:

WCF客户端的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMainService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8888/DataCenter.Factory/MainService/"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMainService"
contract="IMainService" name="WSHttpBinding_IMainService">
<identity>
<servicePrincipalName value="host/WIN-QFIKKT28EHC" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

编程中使用代码描述上述文件:在这里客户端引用的WCF服务命名空间定义为DataCenterFatoryC,客户端访问对象为  DataCenterFatoryC.MainServiceClient MainServiceClient1;

   using System.ServiceModel;  

   WSHttpBinding Bindins;  

   DataCenterFatoryC.MainServiceClient MainServiceClient1;  

   private void MainForm_Load(object sender, EventArgs e)
{
Bindins = new WSHttpBinding();//设置绑定
Bindins.CloseTimeout = TimeSpan.Parse("00:01:00");
Bindins.OpenTimeout = TimeSpan.Parse("00:01:00");
Bindins.ReceiveTimeout = TimeSpan.Parse("00:10:00");
Bindins.SendTimeout = TimeSpan.Parse("00:01:00");
Bindins.BypassProxyOnLocal = false;
Bindins.TransactionFlow = false;
Bindins.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
Bindins.MaxBufferPoolSize = ;
Bindins.MaxReceivedMessageSize = ;
Bindins.MessageEncoding = WSMessageEncoding.Text;
Bindins.TextEncoding = Encoding.UTF8;
Bindins.UseDefaultWebProxy = true;
Bindins.ReaderQuotas.MaxDepth = ;
Bindins.ReaderQuotas.MaxStringContentLength = ;
Bindins.ReaderQuotas.MaxArrayLength = ;
Bindins.ReaderQuotas.MaxBytesPerRead = ;
Bindins.ReaderQuotas.MaxNameTableCharCount = ;
Bindins.ReliableSession.Ordered = true;
Bindins.ReliableSession.InactivityTimeout = TimeSpan.Parse("00:10:00");
Bindins.ReliableSession.Enabled = false;
Bindins.Security.Mode = SecurityMode.Message;
Bindins.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Bindins.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
Bindins.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
Bindins.Security.Message.NegotiateServiceCredential = true;
Bindins.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
Bindins.Security.Message.EstablishSecurityContext = true; string address = "http://localhost:8888/DataCenter.Factory/MainService/";//服务终结点的URL
MainServiceClient1 = new DataCenterFatoryC.MainServiceClient(Bindins, new EndpointAddress(address));
MainServiceClient1.Open();
}

通过对Bindins的参数设置,能有效的描述访问过程的一些问题,比如上传下载大文件,大数据表都依赖重要参数的设置,否则运行中会有异常错误发生,这是我们应该注意的。