0

パラメータとして指定された場所にディレクトリを作成する単純な WCF サービスがあります。このサービスは Windows サービスとしてホストされ、管理者アカウントで実行されます。

InstanceContextMode は Single であり、Concurrency も同様です。

このメソッドは、作成後にディレクトリの場所の文字列を返します。

クライアントは、ASP.NET を使用して別のコンピューターからこのサービスにアクセスしています。彼にはユースケースがあり、2 秒間に 5 回クリックするなど、ページ上のボタンを数秒間に複数回クリックします。何が起こっているかというと、サービスは 5 つすべてではなく、2 つまたは 3 つのフォルダーしか作成しないということです。

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