1.) У меня есть основной метод Обработка, которая принимает строку в качестве аргумента и эта строка содержит некоторое количество задач.Доступ к службе PerSession одновременно в WCF с использованием C#
2.) У меня есть другой метод Status, который отслеживает первый метод, используя две переменные TotalTests и CurrentTest. который будет изменяться каждый раз с помощью цикла в первом методе (Обработка).
3.) Когда несколько клиентов совершают вызов параллельно с моей веб-службой, чтобы вызвать метод обработки, передав строку, у которой разные задачи, потребуется больше времени для обработки. поэтому в среднем, в то время как клиенты будут использовать второй поток, чтобы вызвать метод Status в веб-сервисе, чтобы получить статус первого метода.
4.) Когда делается точка 3, все клиенты должны получать переменные (TotalTests, CurrentTest) параллельно с тем, чтобы их смешивали с другими клиентскими запросами.
5.) Код, который я привел ниже, приводит к смешению результатов переменных для всех клиентов, когда я делаю их статическими. Если я удаляю static для переменных, то клиенты просто получают все 0 для этих 2 переменных, и я не могу это исправить. Пожалуйста, ознакомьтесь с приведенным ниже кодом.
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service1 : IService1
{
public int TotalTests = 0;
public int CurrentTest = 0;
public string Processing(string OriginalXmlString)
{
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.LoadXml(OriginalXmlString);
this.TotalTests = XmlDoc.GetElementsByTagName("TestScenario").Count; //finding the count of total test scenarios in the given xml string
this.CurrentTest = 0;
while(i<10)
{
++this.CurrentTest;
i++;
}
}
public string Status()
{
return (this.TotalTests + ";" + this.CurrentTest);
}
}
конфигурации сервера
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" closeTimeout="00:10:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
конфигурации клиента
<wsHttpBinding>
<binding name="WSHttpBinding_IService1" closeTimeout="00:10:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
Ниже упоминается мой код клиента
class Program
{
static void Main(string[] args)
{
Program prog = new Program();
Thread JavaClientCallThread = new Thread(new ThreadStart(prog.ClientCallThreadRun));
Thread JavaStatusCallThread = new Thread(new ThreadStart(prog.StatusCallThreadRun));
JavaClientCallThread.Start();
JavaStatusCallThread.Start();
}
public void ClientCallThreadRun()
{
XmlDocument doc = new XmlDocument();
doc.Load(@"D:\t72CalculateReasonableWithdrawal_Input.xml");
bool error = false;
Service1Client Client = new Service1Client();
string temp = Client.Processing(doc.OuterXml, ref error);
}
public void StatusCallThreadRun()
{
int i = 0;
Service1Client Client = new Service1Client();
string temp;
while (i < 10)
{
temp = Client.Status();
Thread.Sleep(1500);
Console.WriteLine("TotalTestScenarios;CurrentTestCase = {0}", temp);
i++;
}
}
}
Может ли один пожалуйста, помогите.
@Beygi ---- я модифицировали, как вы предложили. Пожалуйста, взгляните на это. – krishna555
Вы уверены, что ваши привязки включены в сеанс? Пожалуйста, предоставьте конфигурацию клиента и сервера, если нет. Оба звонка за один сеанс? - Предоставьте код клиента. –
@DmitryHarnitski --- предоставил полную дополнительную информацию, которую вы запросили. Пожалуйста, посмотрите – krishna555