将 C# 桌面应用程序移植到 Web

Posted

技术标签:

【中文标题】将 C# 桌面应用程序移植到 Web【英文标题】:Porting a C# desktop app to web 【发布时间】:2012-03-11 14:20:54 【问题描述】:

出于某种目的,我构建了一个桌面WPF C# 应用程序。 C# 应用程序调用另一个 C++ 应用程序中的函数,并将 C++ 应用程序的结果返回给 C# 应用程序。该应用程序运行良好,但我打算将相同的功能带到 Web (ASP.NET)

我可以使用我在桌面解决方案中使用的相同类型的东西吗? ASP.NET 应用程序能否将函数调用到 C++ 项目中,并从 C++ 应用程序中取回结果? DllImport[CallingConvention = CDecl, CharEncoding=Ansi]

编辑-- 我主要担心的是,当我向 C++ 应用程序发出函数调用时,C++ 函数需要 5 秒才能完成处理。在此期间,可以认为 C# 应用程序具有冻结的 GUI。在 ASP.NET 网站中类似的情况会发生什么?会不会因为多线程等等而一团糟?

【问题讨论】:

【参考方案1】:

是的,ASP.NET 应用程序可以使用 DllImport 机制。

【讨论】:

这有什么不同还是一样?我主要担心的是,当我向 C++ 应用程序发出函数调用时,C++ 函数需要 5 秒才能完成处理。在此期间,可以认为 C# 应用程序具有冻结的 GUI。在 ASP.NET 网站中类似的情况会发生什么?会不会因为多线程等等而一团糟? 如果计算需要 5 秒,服务器上的请求处理将同样需要 5 秒(+ 一些发送响应的时间,但以毫秒为单位)。客户端将等待服务器的响应。如果您将使用 AJAX,则网页不会被冻结。否则,用户将等待整个页面数据(可能会在浏览器中看到上一个/空页面和加载动画)。 处理请求的最长时间可在 Web 服务器中配置(您将适当地使用 IIS)。有很多用于稳定性/可扩展性/等的可配置值...【参考方案2】:

在 ASP.NET 应用程序中调用 COM 或 pinvoked 方法没有问题。即使呼叫持续 5 秒完成,客户端的浏览器也只是等待应答。结果,您的应用程序的用户体验变得迟缓。

通常如此持久的服务器调用被包装在 AJAX 请求中,这样至少您可以向用户显示一些信息,例如带有“请稍候”或类似内容的旋转圆圈。

【讨论】:

【参考方案3】:

基本一样! wpf 使用与 aps.net 相同的 clr 不同之处在于,Web 应用程序主要是多用户环境。 因此您的 com/c++ 组件必须与并发用户一起使用。

【讨论】:

以上是关于将 C# 桌面应用程序移植到 Web的主要内容,如果未能解决你的问题,请参考以下文章

将 Silverlight 移植到 WPF

是否可以将 Facebook iOS API 移植到普通的 OSX 桌面应用程序?

Web内核微信小程序框架实践

基于Web内核的微信小程序框架实践

将独立 JMS 应用程序移植到 Web/应用程序服务器

将 HttpModule .Net 类库移植到 .Net Core Web API