gpt4 book ai didi

c# - 在 Windows 服务中调用 Web 服务

转载 作者:行者123 更新时间:2023-11-30 19:54:33 27 4
gpt4 key购买 nike

我使用了一个简单的 Windows 服务来使方法在特定时间运行并且运行良好。之后我已经尝试过:

protected override void OnStart(string[] args)
{
this.WriteToFile("Simple Service started {0}");
this.ScheduleService();
}

protected override void OnStop()
{
this.WriteToFile("Simple Service stopped {0}");
this.Schedular.Dispose();
}

private Timer Schedular;

public void ScheduleService()
{
try
{
Schedular = new Timer(new TimerCallback(SchedularCallback));
string mode = ConfigurationManager.AppSettings["Mode"].ToUpper();
this.WriteToFile("Simple Service Mode: " + mode + " {0}");

//Rest of the code here
}
catch(Exception ex)
{
WriteToFile("Simple Service Error on: {0} " + ex.Message + ex.StackTrace);

//Stop the Windows Service.
using (System.ServiceProcess.ServiceController serviceController = new System.ServiceProcess.ServiceController("SimpleService"))
{
serviceController.Stop();
}
}
}

这是在一个简单的 Windows 应用程序中完成的。所以我想做的是在windows服务中调用一个web服务(在特定时间操作的特定方法)。我正在构建的应用程序是基于 Web 的,我有点困惑如何将 Windows 服务集成到其中?我是否需要任何替代方案或任何建议,我们将不胜感激。

注意:我想知道是否需要在web应用程序中为windows服务创建另一个项目或任何其他方式来实现?

最佳答案

要从 Windows 服务应用程序调用 Web 服务,您首先要从该 Web 服务生成 DLL,然后实例化其命名空间。假设您拥有该 Web 服务的代码和/或知道其 namespace ,您可以执行以下命令来执行此操作:

  1. 在命令行上执行这些行:

    cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 工具
    wsdl/l:CS/protocol:SOAP %svc%?WSDL

    其中 %svc% 是您的 Web 服务的 URL,即 http://localhost:777/MyWebService.asmx

    如果代码是 VB 而不是 C#,请将 /l:CS 更改为 /l:VB。这将输出一个可以转换为 DLL 的代理类文件。

  2. MyWebService.cs 文件从 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 ToolsC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ 目录。

  3. 在命令行中运行这两个命令:
    cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
    csc/t:library %name%.cs/reference:System.Web.Services.dll/optimize

    其中 %name% 是类的名称(没有 .cs,因为命令会附加它)。在我们的例子中,我们将使用 MyWebService。 (将 VB 类的 .cs 更改为 .vb。)

  4. 通过 Windows 资源管理器导航到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。您应该会看到在该文件夹中创建了一个 DLL,其中包含该类的名称 (MyWebService.dll)。将此文件复制到服务项目的 bin 文件夹中。您需要将 bin 文件夹设置为包含在您的项目中,然后右键单击该文件夹以Add > Existing Item。选择 DLL。导入后,选择 DLL 并将其属性更改为:

    构建操作:内容
    复制到输出目录:如果较新则复制(或始终复制,如您所愿)

  5. 右键单击引用 > 添加引用。导航到您的 Web 服务的 bin 文件夹中的 DLL。

  6. 右键单击引用 > 添加服务引用。假设您的 Web 服务正在运行,获取其完整 URL(即 http://localhost:777/MyWebService.asmx)并将其放在地址行中。在命名空间文本框中,给它一些比 ServiceReference1 更有意义的东西,但它不应该与 MyWebService(ASMX 文件的名称/命名空间)相同。也许 MWS

  7. 在您的 Windows 服务中实例化您的 Web 服务:

    MWS.MyWebServiceSoapClient webService = new MWS.MyWebServiceSoapClient();
    webService.Open();
    string someDataYouWant = webService.SomeMethodToGetData();
    webService.Close();

    或者你可以这样做:

    MyWebService webService = new MyWebService();
    string someDataYouWant = webService.SomeMethodToGetData();
    webService.Dispose();

关于c# - 在 Windows 服务中调用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com