在我的代码中,我使用静态字段来存储特定值。
public static int webServiceId;
我删除了它并使用任何其他解决方案。但该值应在回发后保留。我们不能在这里使用Session或ViewState。因为我正在使用服务(在服务层)。
示例:
我在下面的xyz.cs文件方法中获得了webservice id:
public int SetWebServiceInformation(int? webServiceID, string webServiceName)
{
context.WebService_InsertUpdate(ref webServiceID, webServiceName);
webServiceId = webServiceID.Value;
return webServiceID.Value;
}
然后控件转到另一个不同类文件的方法(比如abd.cs文件)。并且假设在调用方法异常时它将调用我的第一个类文件(xyz.cs)的方法LogError(异常错误)。 当控件返回我们的类文件(xyz.cs)时,我们需要webservice Id。因为我们正在使用它根据webservice Id将异常信息存储到数据库中。
protected void LogError(Exception error)
{
----//some logic to get errorLogID//---
if (errorLogID > 0)
WebServiceErrorLogging(errorLogID, webServiceId);
//here we have webServiceId is a static variable
}
答案 0 :(得分:1)
您是否考虑过实施Singleton?
这样你就可以有一个“全局”类来存储参数。
using System.Runtime.CompilerServices;
public class Singleton
{
private static Singleton Instance = null;
static readonly object padlock = new object();
// The private constructor doesnt allos a default public constructor
private Singleton() {}
// Synchronized "constructor" to make it thread-safe
[MethodImpl(MethodImplOptions.Synchronized)]
private static void CreateInstance()
{
lock(padlock)
{
if (Instance == null)
{
Instance = new Singleton();
}
}
}
public static Singleton GetInstance()
{
if (Instance == null) CreateInstance();
return Instance;
}
public int webServiceId {get; set;}
}
// Test class
public class Prueba
{
private static void Main(string[] args)
{
//Singleton s0 = new Singleton(); //Error
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if(s1==s2)
{
// Misma instancia
}
}
}
上面的代码实现了一个类,当实例化时(通过GetInstance()静态方法)返回该类的唯一实例。
答案 1 :(得分:1)
Session variable in WCF application
也许这会有所帮助,看看RandomNoob的答案。
答案 2 :(得分:0)
您可以将webServiceId
打包在Singleton课程中。
public sealed class WebServiceSettings
{
private static readonly WebServiceSettings instance=new WebServiceSettings();
private static int webServiceId;
static WebServiceSettings()
{
webServiceId = //set webServiceId
}
private WebServiceSettings(){}
public static WebServiceSettings Current
{
get
{
return instance;
}
}
public int WebServiceId {get{return webServiceId;}}
}
然后您可以调用Id:
WebServiceSettings.Current.WebServiceId;
这个类基本上确保它只构造一次(在C#中,静态构造函数被保证被调用一次)。因此,填充WebServiceId
的构造函数中的代码只会运行一次。