을 사용하여 WCF에서 PerSession 서비스에 동시에 액세스하기 1.) main 메소드 Processing을 사용합니다.이 메소드는 인수로 문자열을 취하고 그 문자열에는 x 개의 작업이 포함되어 있습니다.C#
2.) 두 가지 변수 인 TotalTests와 CurrentTest를 사용하여 첫 번째 방법을 추적하는 또 다른 메서드 Status가 있습니다. 첫 번째 방법 (처리)의 루프에서 매번 수정됩니다.
3.) 둘 이상의 클라이언트가 웹 서비스에 병렬 처리하여 문자열을 전달하여 Processing 메서드를 호출하면 다른 작업을 처리하는 데 더 많은 시간이 소요됩니다. 따라서 클라이언트는 두 번째 스레드를 사용하여 웹 서비스의 Status 메서드를 호출하여 첫 번째 메서드의 상태를 가져옵니다.
4. 포인트 번호 3이 완료되면 모든 클라이언트는 다른 클라이언트 요청과 섞이지 않고 평행하게 변수 (TotalTests, CurrentTest)를 가져옵니다.
5.) 아래에 제공된 코드는 정적으로 만들 때 모든 클라이언트에 대해 변수 결과가 혼합되어 나타납니다. 변수에 대해 정적을 제거하면 클라이언트는이 두 변수에 대해 모두 0을 얻고 있으며이를 수정할 수 없습니다. 아래 코드를 살펴보십시오.
[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 같은 클라이언트 코드가 ---- 내가 수정 한 2.Change
. 그것을보십시오. – krishna555
바인딩에서 세션을 사용할 수 있습니까? 그렇지 않은 경우 클라이언트와 서버 구성을 모두 제공하십시오. 하나의 세션에서 두 통화를 모두합니까? - 고객 코드를 입력하십시오. –
@DmitryHarnitski --- 요청한 완전한 추가 정보를 제공했습니다. 새로운 클라이언트가 새로운 세션을 사용할 때마다 – krishna555