如何在WCF服务中的方法之间传递变量?我尝试使用字段,属性,会话,但所有这些都作为客户端调用不同的方法得到重置。例如,我需要从第一种方法发送身份验证到其余的方法。
答案 0 :(得分:0)
您需要使用每会话实例创建,这将为会话保留专用的服务类实例。应尽可能避免每次会话实例化,因为它不能很好地扩展。
将服务上的InstanceContextMode=InstanceContextMode.PerSession
设置为行为,并在服务合同上设置SessionMode=SessionMode.Required
。如果您不小心尝试使用不支持会话的绑定,这将使您的服务失败 - WsHttpBinding或NetTcpBinding正常,但不是BasicHttpBinding。
请参阅WCF Instance Management - PerSession Mode和http://msdn.microsoft.com/en-us/library/ms733040%28v=vs.110%29.aspx。
该问题引用的文章中的代码显示了属性的使用(http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per#Per%20session%20Instance%20mode):
namespace Northwind.ServiceContracts
{
[ServiceContract(Name = "CustomerCartService",
Namespace = "http://northwind.com/CustomerCartService",
SessionMode=SessionMode.Required)]
public interface ICustomerCartService
{
[OperationContract]
bool AddProductsToCart(int productID);
}
}
namespace Northwind.CustomerCartServices
{
[ServiceBehavior(Name = "CategoryService",
Namespace = "http://northwind.com/CustomerCartService",
InstanceContextMode=InstanceContextMode.PerSession )]
public class CustomerCartService : ICustomerCartService
{
public bool AddProductsToCart(int productID);
{
// code for adding product to customer cart.
return true;
}
}
}