【发布时间】:2009-04-27 16:45:54
【问题描述】:
我有以下代码用于返回我的 WCF 服务实例ServiceClient:
var readerQuotas = new XmlDictionaryReaderQuotas()
{
MaxDepth = 6000000,
MaxStringContentLength = 6000000,
MaxArrayLength = 6000000,
MaxBytesPerRead = 6000000,
MaxNameTableCharCount = 6000000
};
var throttlingBehaviour = new ServiceThrottlingBehavior(){MaxConcurrentCalls=500,MaxConcurrentInstances=500,MaxConcurrentSessions = 500};
binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
dualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
{MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
endpointAddress = new EndpointAddress("http://localhost:28666/DBInteractionGateway.svc");
return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);
最近我遇到了一些超时问题,所以我决定添加一个限制行为,如下所示:
var throttlingBehaviour = new ServiceThrottlingBehavior () {
MaxConcurrentCalls=500,
MaxConcurrentInstances=500,
MaxConcurrentSessions = 500
};
我的问题是,我应该在上面的代码中的哪个位置将这个 throttlingBehaviour 添加到我的 MusicRepo_DBAccess_ServiceClient 实例中?
从我在网上找到的一些示例中,他们正在做这样的事情:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = 40,
MaxConcurrentInstances = 20,
MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();
请注意,在上面的代码中,他们使用ServiceHost 而我没有,然后他们打开它(使用Open()),而我打开MusicRepo_DBAccess_ServiceClient 实例......这就是让我困惑。
【问题讨论】:
-
你不能在配置文件中有这个吗?
-
我需要在没有 app.config 文件的情况下与多个项目共享这个 wcf 服务...这就是我以编程方式构建配置的原因
-
您在哪里托管服务?
标签: c# wcf web-services throttling