在Windows服务中调用Web服务

AT-*_*017 2 c# asp.net web-services windows-services

我使用了一个简单的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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

vap*_*guy 6

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

  1. 在命令行上执行以下行:您的Web服务的URL

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

    在哪里%svc%,即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. 导航到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727Windows资源管理器.您应该看到在该文件夹中创建的DLL,其名称为class(MyWebService.dll).将此文件复制到binService项目的文件夹中.您需要设置bin要包含在项目中的文件夹,然后右键单击该文件夹以添加>现有项目.选择DLL.导入后,选择DLL并将其属性更改为:

    构建操作:内容
    复制到输出目录:如果较新则复制(或根据需要复制)

  5. 右键单击" 引用">"添加引用".导航到binWeb服务文件夹中的DLL .

  6. 右键单击" 引用">"添加服务引用".假设您的Web服务正在运行,请获取其完整的URL(即http://localhost:777/MyWebService.asmx)并将其放在地址行上.在Namespace文本框中,给它一些比它更有意义的东西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();