我对wcf非常陌生,希望有人可以提供帮助。我有一个wcf项目和一个Web应用程序。 Wcf项目作为IIS中的应用程序托管在Web项目中,两者都使用相同的应用程序池。
我已将sessionmode.allowed添加到我的wcf接口,启用了aspnetcompatibilitymode。对于绑定,我将传输设置为安全性,并尝试将allowcookies视为false和true。
当我点击网站并检查会话中的密钥时,大约有5个,但是当它通过jquery调用我的服务并且检查会话中的密钥时没有。似乎每次请求都没有发送cookie。
有没有人经历过类似的行为?
由于
答案 0 :(得分:0)
我甚至不知道那是可能的,所以我只是建立了自己的测试项目。 会话状态对我来说很好。
如果有帮助,这里是我编写的代码:
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Web;
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
[OperationContract]
[WebGet]
public string DoWork()
{
var httpContext = HttpContext.Current;
var sessionState = httpContext.Session;
return (string)sessionState["Foo"]; // This returns "Bar"
// which I set in the Page_Load
// server method
}
}
在我的默认页面的加载方法中:
protected void Page_Load(object sender, EventArgs e)
{
System.Web.SessionState.HttpSessionState sessionState = this.Session;
sessionState["Foo"] = "Bar";
}
在我的web.config文件中:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="MyServiceAspNetAjaxBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment
aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true"/>
<services>
<service name="MyService">
<endpoint
address=""
behaviorConfiguration="MyServiceAspNetAjaxBehavior"
binding="webHttpBinding"
contract="MyService"/>
</service>
</services>
</system.serviceModel>