从C#应用程序到ASP.NET应用程序的通信

时间:2014-08-08 07:38:38

标签: c# javascript asp.net wcf

我正在为ASP.NET应用程序创建宿主应用程序(C#)。我想要完成的是让ASP应用程序从C#应用程序获取事件。有了这些数据,我需要从ASP客户端端调用HTTP上下文/会话的服务器端功能。可以使用查询字符串刷新页面。

我目前有两种方法:

1)使用net.tcp到ASP的C#WCF Communication overview - net.tcp C# to ASP.NET 问题:直接联系服务器端层时,会话(HTTP上下文)为NULL。我可以更新静态变量等等,但是我无法告诉客户端使用查询字符串刷新/导航(所以我可以在下一个page_load获取上下文)。

2)C#WebBrowser.Document.InvokeScript(myJavascript()) C# WebBrowser.Invoke to JS

问题:当我到达ASP应用程序的服务器端时,我无法访问静态变量(由于某种原因,它们因此而为NULL)。我尝试过使用Session [" MyVariable"] =" test&#34 ;;在page_load中,调用javascript函数并检查会话变量,但这是NULL。

任何帮助或指向正确的方向都会非常有帮助。如果需要,我会附上一些代码示例。

谢谢!

编辑1: 从我的WebBrowser我可以看到的是Default.aspx页面,所以当从问题#2创建javascript函数时,我需要在这个文件中创建它。如果不是,我无法调用它。

3 个答案:

答案 0 :(得分:1)

对于问题1,您是否尝试启用asp.net兼容性?

  

在ASP.NET兼容模式下运行的服务完全参与ASP.NET应用程序管道,并可以使用ASP.NET功能,如文件/ URL授权,会话状态和HttpContext类。

以下是几个链接:

WCF Services and ASP.NET

ASP.NET Compatibility

您可以使用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向客户端会话发送警报,提示其刷新。