【发布时间】:2012-02-06 22:34:29
【问题描述】:
我已经创建了一个网络服务。经过一段时间后,我最终得到以下错误:“打开操作未在分配的超时时间 00:01:00 内完成。分配给此操作的时间可能是更长的超时时间。”
我不确定为什么会收到此错误,因为我已将打开超时设置为大约 2 小时。我是 WCF Web 服务和一般 Web 服务的新手。我在下面显示的配置是否有任何危险信号?
.NET 版本:4.0
客户端配置:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="SecurityServiceDev" receiveTimeout="02:00:00" openTimeout="02:00:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxConnections="1000" maxBufferSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<diagnostics>
<messageLogging logEntireMessage="true" maxMessagesToLog="300" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="true" />
</diagnostics>
<client>
<endpoint address="net.tcp://XXX.svc" binding="netTcpBinding" bindingConfiguration="SecurityServiceDev" contract="SecurityProxy.ISecurityService" name="SecurityService" />
</client>
网络服务配置:
<system.serviceModel>
<services>
<service name="TMS.DAL.Common.Security.BAL.SecurityService" behaviorConfiguration="DataServiceBehavior">
<endpoint address="net.tcp://XXX.svc"
name="SecurityService"
binding="netTcpBinding"
bindingConfiguration="Binding"
contract="TMS.DAL.Common.Security.BAL.ISecurityService"/>
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="Binding"
receiveTimeout="02:00:00"
openTimeout="02:00:00"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxConnections="1000"
maxBufferSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<client/>
<behaviors>
<serviceBehaviors>
<behavior name="DataServiceBehavior" >
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" />
<dataContractSerializer maxItemsInObjectGraph="61200000" />
<serviceThrottling maxConcurrentCalls="1000"
maxConcurrentInstances="2147483647" maxConcurrentSessions="1000"/>
</behavior>
</serviceBehaviors>
</behaviors>
代码里面唯一的配置如下:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class SecurityService : ISecurityService
服务合同:
[ServiceContract]
public interface ISecurityService
{
[OperationContract]
bool IsUserInRole(String userName, String roleName);
[OperationContract]
bool DoesUserHavePermission(String userName, String permissionName);
[OperationContract]
List<String> GetUsersInRole(String roleName);
[OperationContract]
List<String> GetRolesForUser(String userName);
[OperationContract]
List<String> GetPermissionsForUser(String userName);
[OperationContract]
List<String> GetPermissionsForRole(String roleName);
[OperationContract]
List<String> GetRolesForApplication(String appName);
[OperationContract(Name = "GetListValuesForRoleAndList")]
List<String> GetListValues(String roleName, String listNames);
[OperationContract(Name = "GetListValuesForRolesAndList")]
List<String> GetListValues(List<String> roleNames, List<String> listNames);
[OperationContract(Name = "GetListValuesForAppUserList")]
List<String> GetListValues(String appName, String userName, List<String> listNames);
[OperationContract]
List<String> GetListsForUser(String userName);
[OperationContract]
bool RoleExists(String roleName);
[OperationContract]
bool ExternalUserExists(String userName, String password);
【问题讨论】:
-
您是否在完成通话后关闭客户端的代理?
-
您使用的是什么版本的 .NET,您可以向我们展示服务合同吗?
-
@Tim Web 应用程序不断调用 Web 服务。我没有任何关闭客户端代理的代码。我希望连接是自动编码的。 Web 应用程序对 WS 进行了多次调用,我知道这可能是一个设计错误。如何关闭客户端的代理?
-
我认为 Tim 是对的 - 基本上你正在破坏会话节流,进一步的请求正在排队,然后超时。您在哪里创建客户端代理?
-
考虑使用 sendTimeout 属性以及其他超时属性
标签: asp.net-mvc wcf