0

我有一个简单的 WCF 服务,它在指定为参数的位置创建一个目录。该服务作为 Windows 服务托管并在管理员帐户下运行。

InstanceContextMode 是 Single,Concurrency 也是。

该方法在创建后返回目录位置的字符串。

客户端正在使用 ASP.NET 从另一台计算机访问此服务。他有一个用例,他在几秒钟内多次点击页面上的按钮,就像在 2 秒内点击 5 次一样。发生的事情是该服务仅创建 2 或 3 个文件夹,而不是全部 5 个。

我知道 WCF 中有一个默认的排队机制,对于我的服务,它要么不起作用,要么我没有编写它来使用该机制。

我该如何解决这个问题。

这是按钮单击的 ASP.NET 代码

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>

问候。

4

1 回答 1

0

步骤 1. 从客户端 ping(这是服务器端 ASP.NET 代码,而不是浏览器),它可以到达托管 WCF 服务的机器吗?位于您的网络服务器和 WCF 托管位置之间的防火墙?

STEP 2. SVC log 从您的配置文件中设置 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>

然后从命令提示符使用 SvcTraceViewer - 寻找红色。

第 3 步:在您的操作中添加更多日志记录,看看是否实际执行了任何操作

http://msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx

于 2013-12-20T16:41:24.617 回答