在WCF服务中的方法之间传递变量

时间:2014-11-05 20:11:37

标签: c# web-services wcf soap

如何在WCF服务中的方法之间传递变量?我尝试使用字段,属性,会话,但所有这些都作为客户端调用不同的方法得到重置。例如,我需要从第一种方法发送身份验证到其余的方法。

1 个答案:

答案 0 :(得分:0)

您需要使用每会话实例创建,这将为会话保留专用的服务类实例。应尽可能避免每次会话实例化,因为它不能很好地扩展。

将服务上的InstanceContextMode=InstanceContextMode.PerSession设置为行为,并在服务合同上设置SessionMode=SessionMode.Required。如果您不小心尝试使用不支持会话的绑定,这将使您的服务失败 - WsHttpBinding或NetTcpBinding正常,但不是BasicHttpBinding。

请参阅WCF Instance Management - PerSession Modehttp://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;
        }
    }
}