• WCF客户端C#代码 配置config文件


    不多说了,直接上代码吧。。。。

    服务端Web.config文件中bindings配置

       <bindings>
          <wsHttpBinding>
            <binding name="httpconf" closeTimeout="10:10:10"
              openTimeout="10:10:10" receiveTimeout="10:10:10" sendTimeout="10:10:10"
              allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
               maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >
              <reliableSession ordered="true" inactivityTimeout="00:20:00"
                enabled="false" />
              <security mode="Message">
                <transport clientCredentialType="Windows" proxyCredentialType="None"
                 realm="" />
                <message clientCredentialType="Windows" negotiateServiceCredential="true"
                  algorithmSuite="Default" />
              </security>
            </binding>
          </wsHttpBinding>
     </bindings>

    服务端Web.config文件中behavior配置

    <behavior name="Card_WcfService.WCF.CardInfoServiceBehavior">
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              <serviceMetadata httpGetEnabled="true" />
              <serviceTimeouts transactionTimeout="00:10:00" />
              <serviceDebug includeExceptionDetailInFaults="false" />
              <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647" />
     </behavior>

    服务端Web.config文件中service配置

     <service behaviorConfiguration="Card_WcfService.WCF.CardInfoServiceBehavior"
            name="Card_WcfService.WCF.CardInfoService">
            <endpoint address="" binding="wsHttpBinding" contract="Card_SystemAPI.ICardInfoService"  bindingConfiguration="httpconf">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>      
          </service>

    下面才是我想要的东西,弄这个花了我半天时间
    客户端代码注册配置文件

     public class ClientFactory<TClient> : IDisposable
        {
            static EndpointAddress serviceAddress;
            static WSHttpBinding binding;
            ChannelFactory<TClient> factory;
            TClient proxy;
            OperationContextScope scope;
            public TClient CreateClient()
            {
                factory = new ChannelFactory<TClient>(binding, serviceAddress);
                foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
                {
    
                    DataContractSerializerOperationBehavior dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                        as DataContractSerializerOperationBehavior;
    
                    if (dataContractBehavior != null)
                    {
    
                        dataContractBehavior.MaxItemsInObjectGraph = 2147483647;
    
                    }
    
                }
                proxy = factory.CreateChannel();
                ((IClientChannel)proxy).Faulted += new EventHandler(a_Faulted);
                scope = new OperationContextScope(((IClientChannel)proxy));
                var curId = CacheStrategy.CurUser == null ?Guid.Empty : CacheStrategy.CurUser.AutoID;
                MessageHeader<Guid> mhg = new MessageHeader<Guid>(curId);
                MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
                OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
                return proxy;
            }
            void a_Faulted(object sender, EventArgs e)
            {
                //todo:此处得不到异常的内容
            }
            public void Dispose()
            {
                try
                {
                    scope.Dispose();
                    ((IClientChannel)proxy).Close();
                    factory.Close();
                }
                catch
                {
                }
            }
            static ClientFactory()
            {
                var surl = ConfigurationManager.AppSettings["ServiceURL"];
                var iname = typeof(TClient).FullName.Substring("Card_SystemAPI.I".Length);
                var sname = string.Format("{0}.svc", iname);
                var url = Path.Combine(surl, sname);
                serviceAddress = new EndpointAddress(url);
                binding = new WSHttpBinding();
                binding.CloseTimeout = new TimeSpan(10, 10, 10);
                binding.OpenTimeout = new TimeSpan(10, 10, 10);
                binding.SendTimeout = new TimeSpan(10, 10, 10);
                binding.ReceiveTimeout = new TimeSpan(10, 10, 10);
                binding.MaxReceivedMessageSize = 2147483647;
                binding.MaxBufferPoolSize = 2147483647;
                binding.AllowCookies = true;
            }
        }
    

    QQ群号: 242251580  身份认证:.NET技术讨论

    如有转载,请保留原有地址:http://www.cnblogs.com/hank-hu/p/4663568.html                       

  • 相关阅读:
    The Single Responsibility Principle
    MSComDlg.CommonDialogserver不能创建对象错误的解决
    Hadoop的HA机制(Zookeeper集群+Hadoop集群)配置记录
    linux怎样查看port被谁占用
    hadoop配置说明
    C#中的继承与多态还有接口
    MySQL DATE_FORMAT() 函数
    MySQL处理数据库和表的常用命令
    mysql 增加用户
    sql2008连接数据库问题
  • 原文地址:https://www.cnblogs.com/hank-hu/p/4663568.html
Copyright © 2020-2023  润新知