我正在尝试在WCF服务中测试超时配置。我希望服务根据配置或代码中的设置超时请求。 WCF客户端(例如Web应用程序)具有与预期类似的配置超时,但我希望服务本身能够遵守设置和超时。
以多种方式对此进行了测试。
1。) IIS托管的WCF服务,其中包含web.config中列出的超时
<bindings>
<basicHttpBinding>
<binding name="Service1Binding" closeTimeout="00:00:10" openTimeout="00:00:10" receiveTimeout="00:00:10" sendTimeout="00:00:10">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="Service1">
<endpoint address="Service1" binding="basicHttpBinding" bindingConfiguration="Service1Binding" name="IService1" contract="TestWcfTimeout.IService1" />
</service>
</services>
2.。自托管WCF服务,代码
中列出了超时 using (var host = new ServiceHost(typeof(Service1), baseAddress))
{
var smb = new ServiceMetadataBehavior{ HttpGetEnabled = true, MetadataExporter = { PolicyVersion = PolicyVersion.Policy15 }};
var endpoint = host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), baseAddress);
endpoint.Binding.OpenTimeout = new TimeSpan(00, 00, 00, 10);
endpoint.Binding.CloseTimeout = new TimeSpan(00, 00, 00, 10);
endpoint.Binding.SendTimeout = new TimeSpan(00, 00, 00, 10);
endpoint.Binding.ReceiveTimeout = new TimeSpan(00, 00, 00, 10);
host.Description.Behaviors.Add(smb);
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
host.Close();
}
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
使用SoapUI客户端对此进行了测试。确保GetData方法比配置的超时花费更多时间来完成执行。因此服务可以超时请求。
- &GT; 但服务不遵守超时,即使达到超时设置,客户端也会收到wcf响应对象。有什么想法吗?
注意到Web应用程序上的类似行为,即使在达到配置时间后服务也不会超时。
- &GT;任何反馈都表示赞赏
答案 0 :(得分:0)
您的web.config超时是指客户端的操作。你正在做的是设置你的网络服务对你的客户的态度。
根据您的配置,这意味着如果您的客户端间隔时间超过10秒对您的Web服务的两个请求,您的客户端将收到超时异常,因为您的Web服务会说“嘿!您的web.config超出了超时。您迟到了,我不会回答!”。
在客户端的配置中设置相同的超时并重复实验,延迟GetData的响应:然后您的客户端将抛出异常并放弃您的网络服务响应。
现在,如果您正在寻找一种设置超时服务端的方法,那么如果请求超过了时间限制,您的服务就会停止处理... you will have to implement it yourself。