除了使用Web服务之外,还有从Windows应用程序调用Web应用程序中的方法吗?两者都在同一台机器上运行。
我基本上想安排一项工作来运行更新某些文件的Windows应用程序(对于贝叶斯垃圾邮件过滤器),然后我想通知网络应用程序重新加载该文件。
我知道这可以通过其他方式完成,但我很想知道它是否可能。
答案 0 :(得分:2)
您可以让您的Windows应用程序连接到Web应用程序并在通过重新加载文件响应的页面中进行GET,我认为不必使用Web服务。这样,您也可以通过Web浏览器实现这一目标。
答案 1 :(得分:1)
如果您希望Web服务直接进行通信,那么它就是“正确的”方式。但是,我发现在某些情况下通过数据库记录进行协调更容易。例如,我的网络应用程序具有批量电子邮件功能。为了使其工作,Web应用程序只留下指定要发送的电子邮件的数据库记录。 WinApp会定期扫描这些记录,当它找到具有“未处理”状态的记录时,它会采取相应的操作。在极高音量的环境中,这对我来说就像是一种魅力。
你不能在另一个方向上做这件事只是因为网络应用程序通常不会在定时循环中存在(有很多方法可以解决这个问题,但它们不值得付出努力)。因此,您需要某种类型的启动操作才能让Web应用知道何时重新加载文件。为此,您可以使用以下代码在页面上执行GET:
WebRequest wrContent = WebRequest.Create("http://www.yourUrl.com/yourpage.aspx");
Stream objStream = wrContent.GetResponse().GetResponseStream();
// I don't think you'll need the stream Reader but I include it for completeness
StreamReader objStreamReader = new StreamReader(objStream);
然后,只要打开此页面,您就会在PageLoad方法中重新加载文件。
答案 2 :(得分:0)
Web应用程序如何加载文件?如果您使用Cache对象的依赖关系,那么只更新该文件将使Cache条目无效,导致您的代码在发现为null时(或基于“invalidated”事件)重新加载该条目。
否则,我不知道如何通知应用程序更新文件。
答案 3 :(得分:0)
ASP.NET应用程序仅作为提供请求的实例存在。这就是为什么Web服务是处理此问题的简单方法的原因 - 应用程序已实例化以服务于服务请求。如果您确定该实例已存在并获得了它的句柄,则可以使用remoting。但是如果没有应用程序实例的具体句柄,则无法直接调用该方法。
还有很多其他沟通方式。您可以使用数据库或其他应用程序轮询和定期更新的其他类型的列表。那里有很多异步MQ解决方案。
答案 4 :(得分:0)
因此,您将专门为此目的在webapp中创建一个页面。使用Get请求并传入url参数。然后在page_load事件检查这个paremter。如果存在则执行处理。通过传入参数,您可以防止意外的页面加载,导致文件在您不希望上传和处理时。
从Windows应用程序中使用.Net HttpWebRequest创建URL请求。示例:http://www.codeproject.com/KB/webservices/HttpWebRequest_Response.aspx