【发布时间】:2013-07-17 13:25:47
【问题描述】:
我遇到了繁忙的 wcf 服务问题,客户端可以通过该服务连接并使用它。 下面是关于类的服务器配置和属性的错误和堆栈跟踪。
错误信息和堆栈跟踪:
The HTTP service located at https://my.web.service.com/Service/Service.svc is unavailable. This could be because the service is too busy or because no endpoint was found listening at the specified address. Please ensure that the address is correct and try accessing the service again later.ExST:
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout)
at System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
网络服务器配置:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Server.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<section name="ServerEdi.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<system.web>
<httpRuntime maxRequestLength="65536"/>
<customErrors mode="Off"/>
<compilation targetFramework="4.5"/>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="IWebService" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" negotiateServiceCredential="true"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="nowa" name="ServiceWeb.WebService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="IWebService"
contract="ServiceWeb.IWebService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="nowa">
<serviceMetadata httpsGetEnabled="true"/>
<serviceCredentials>
<serviceCertificate findValue="xxxyyyzzz.com" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceWeb.MyCustomUserNamePasswordValidator,ServiceWeb"/>
<windowsAuthentication includeWindowsGroups="false" allowAnonymousLogons="false"/>
</serviceCredentials>
<serviceAuthorization impersonateCallerForAllOperations="false"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceThrottling maxConcurrentCalls="500" maxConcurrentInstances="500" maxConcurrentSessions="500" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.webServer>
<urlCompression doStaticCompression="false"/>
</system.webServer>
</configuration>
类属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
//[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
// [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
// ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WebService : IWebService {}
如果有人可以提供帮助,我将不胜感激 stackoverflow 上描述的案例不完全适合并解决我的案例。目前,该服务正在使用大约 50 个客户。当我调用一个返回一些东西的方法并且你不能异步调用它时,问题就来了,因为答案必须立即传递。
【问题讨论】:
-
当你说“当我调用一个返回一些东西的方法时问题就来了,你不能异步调用它,因为答案必须立即传递。”它将花费尽可能长的时间,并且使其同步不会使它更快地返回?
-
我知道,客户将等待答案是对象,并为他提供下一步该做什么的信息。
-
我可以建议你也考虑线程池设置..(见答案stackoverflow.com/questions/2835595/…)
-
Phil_P - 线程池设置似乎没问题,但如果您有任何疑问,我可以提供线程池配置