我正在为ASP.NET应用程序创建宿主应用程序(C#)。我想要完成的是让ASP应用程序从C#应用程序获取事件。有了这些数据,我需要从ASP客户端端调用HTTP上下文/会话的服务器端功能。可以使用查询字符串刷新页面。
我目前有两种方法:
1)使用net.tcp到ASP的C#WCF 问题:直接联系服务器端层时,会话(HTTP上下文)为NULL。我可以更新静态变量等等,但是我无法告诉客户端使用查询字符串刷新/导航(所以我可以在下一个page_load获取上下文)。
2)C#WebBrowser.Document.InvokeScript(myJavascript())
问题:当我到达ASP应用程序的服务器端时,我无法访问静态变量(由于某种原因,它们因此而为NULL)。我尝试过使用Session [" MyVariable"] =" test&#34 ;;在page_load中,调用javascript函数并检查会话变量,但这是NULL。
任何帮助或指向正确的方向都会非常有帮助。如果需要,我会附上一些代码示例。
谢谢!
编辑1: 从我的WebBrowser我可以看到的是Default.aspx页面,所以当从问题#2创建javascript函数时,我需要在这个文件中创建它。如果不是,我无法调用它。
答案 0 :(得分:1)
对于问题1,您是否尝试启用asp.net兼容性?
在ASP.NET兼容模式下运行的服务完全参与ASP.NET应用程序管道,并可以使用ASP.NET功能,如文件/ URL授权,会话状态和HttpContext类。
以下是几个链接:
您可以使用AspNetCompatibilityRequirementsMode.Required
修饰您的服务实现,以明确建议WCF,这些实现必须要求在web.config中启用asp.net兼容性,否则您可以将AspNetCompatibilityRequirementsMode.Allowed
保留为“不”执行它,但如果启用了asp.net comp,仍然能够读取HttpContext。
关于服务实现:
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
在system.serviceModel:
下<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
答案 1 :(得分:0)
对于问题1,我相信您正在尝试从WCF服务“实例化”ASP应用程序类。就像加载你自己的DLL或那样的东西。不要这样做 - 它总是使静态为null,会话为null。你需要在这里反转控件。创建一个回调,这个东西可以像魅力一样工作。
为什么不查看SSE(服务器发送事件)等选项?可能这可以解决你的观点2中的问题。
如果可能,请发布您的代码。
答案 2 :(得分:0)
我想知道你是否不能在这里使用SignalR。
假设它可以适合您的解决方案。您的C#应用程序可以通过SignalR或Web API请求将数据发送回您的服务器。
然后,您的服务器会通过SignalR向客户端会话发送警报,提示其刷新。