在WCF中实现排队
我有一个简单的WCF服务,它在指定为参数的位置创建一个目录。 该服务作为Windows服务托管,并在管理员帐户下运行 InstanceContextMode是单模式,并发模式也是单模式 该方法在创建目录位置后返回目录位置的字符串 客户端正在使用ASP.NET从另一台计算机访问此服务。 他有一个用例,他在几秒钟内多次点击页面上的按钮,就像在2秒钟内点击5次一样。现在的情况是,该服务只创建2或3个文件夹,而不是全部5个 我知道WCF中有一个默认的排队机制,对于我的服务,它要么不工作,要么我还没有编写它来使用该机制 我该如何着手解决这个问题 下面是单击按钮的ASP.NET代码在WCF中实现排队,wcf,Wcf,我有一个简单的WCF服务,它在指定为参数的位置创建一个目录。 该服务作为Windows服务托管,并在管理员帐户下运行 InstanceContextMode是单模式,并发模式也是单模式 该方法在创建目录位置后返回目录位置的字符串 客户端正在使用ASP.NET从另一台计算机访问此服务。 他有一个用例,他在几秒钟内多次点击页面上的按钮,就像在2秒钟内点击5次一样。现在的情况是,该服务只创建2或3个文件夹,而不是全部5个 我知道WCF中有一个默认的排队机制,对于我的服务,它要么不工作,要么我还没有编写
protected void Button1_Click(object sender, EventArgs e)
{
ClientClass objClientClass = new ClientClass();
string returnValue = string.Empty;
Random random = new Random();
string uid = random.Next().ToString();
returnValue = objClientClass.StartWorkflow(uid);
Label1.Text = returnValue;
}
以下是主机的app.config:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="All"
propagateActivity="true">
<listeners>
<add name="traceListener" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging"
switchValue="All"
propagateActivity="true">
<listeners>
<add name="traceListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Traces.svclog" />
</sharedListeners>
</system.diagnostics>
<system.web>
<compilation debug="true"></compilation>
</system.web>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false"
logMalformedMessages="true"
maxMessagesToLog="5000"
maxSizeOfMessageToLog="2000">
</messageLogging>
</diagnostics>
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceThrottling maxConcurrentCalls="1" maxConcurrentSessions="5" maxConcurrentInstances="5" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="NewBehavior" name="Utilities.WS.SampleWebService.Jobs">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
contract="Utilities.WS.SampleWebService.IJobs" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://00.00.000.00:8732/Utilities.WS.SampleWebService.Jobs" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
问候。步骤1。从客户端ping(这是服务器端ASP.NET代码,而不是浏览器),它能到达承载WCF服务的计算机吗?位于您的Web服务器和WCF所在位置之间的防火墙
第二步。SVC日志
从配置文件中设置svclog
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
在您的服务中启用跟踪,查看您的服务收到了多少条消息。然后你就会明白,无论问题是在你的asp方面还是在WCF方面hi@voo,我启用了跟踪。svcLog显示该服务在5次单击中仅收到3次请求,我可以看到3次请求的结果。剩下的两个怎么了?我觉得问题不在你的服务上。它能在你的按钮点击处理程序中吗?我的意思是,你可以点击它5次,但它只能发射3次。并尝试在限制中更改MaxConcurrentCalls(当前正在执行的服务调用数)Hi@voo,感谢您的帮助。是客户的过错。该请求需要在该端进行验证。再次感谢您建议跟踪,感谢您的时间和帮助。