当前位置:首页 > Windows程序 > 正文

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

2021-03-29 Windows程序

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

服务端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技术讨论

如有转载,,请保留原有地址:                       

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69502.html