में कहा जाने वाला विनाशक कब होता है मुझे एक सेवा बनाने की आवश्यकता होती है जो डब्ल्यूसीएफ सत्र बनाए रखेगी। कन्स्ट्रक्टर में मैंने डीबी से डेटा में पढ़ा और जब सत्र समाप्त होता है तो मुझे इसे वापस सहेजना पड़ता है।डब्लूसीएफ सेवा
यदि मैं क्लाइंट पर बंद() को कॉल करता हूं तो सत्र सही होता है (मेरा क्लाइंट सेवा क्लाइंट SvcUtil.exe के साथ बनाया गया था)।
जब मैं इसका परीक्षण करता हूं तो मुझे लगता है कि इसे कभी-कभी लगभग बाद में बुलाया जाता है। 10 मिनट, कभी-कभी 20 मिनट के बाद और कभी-कभी बिल्कुल नहीं।
तो विनाशक कहलाता है कब?
सेवा
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service:IService
{
private User m_User = null;
public Service()
{
m_User = User.LoadFromDB();
}
~Service()
{
m_User.SaveToDB();
}
public void SetName(string p_Name)
{
m_User.Name = p_Name;
}
}
Web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<sessionState timeout="2" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="Karatasi.Services.B2C" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:19401/B2C.svc"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
bindingConfiguration="test"
contract="Karatasi.Services.IB2C"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="test" receiveTimeout="00:01:00" >
<reliableSession enabled="true" ordered="false" inactivityTimeout="00:01:00"/>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
ग्राहक
ServiceClient serviceClient = null;
try
{
serviceClient = new ServiceClient();
serviceClient.SetName("NewName");
Console.WriteLine("Name set");
}
catch (Exception p_Exc)
{
Console.WriteLine(p_Exc.Message);
}
finally
{
if (serviceClient != null)
{
if (serviceClient.State == CommunicationState.Faulted)
{
serviceClient.Abort();
}
else
{
serviceClient.Close();
}
}
Console.ReadKey();
}
का उपयोग कर सकते हैं सबसे पहले यह पूरी तरह से गलत सेवा डिज़ाइन है। –