在调试器中运行的应用程序连接到webservice,但不是作为Windows服务运行时

时间:2012-02-01 15:29:38

标签: c# .net windows-services

我在C#中创建了一个应用程序,我将其作为Windows服务运行。这很好用。

我最近修改了它,以便它连接到Web服务。在Studio中运行时,此新代码可以正常工作并连接到Web服务。但是,当我将程序作为Windows服务运行(在同一台机器上)时,程序会因为无法连接到Web服务而超时(提供异常 - 无法连接到远程服务器)。

有谁能想到为什么会发生这种情况?

作为服务运行时出现的异常是:

System.Net.WebException was unhandled
Message="Unable to connect to the remote server"
Source="System"
StackTrace:
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,          Object[] parameters)
   at DataExtractionService.uk.co.myserver.Service1.SendEmail(String Message, String Subject, String FromAddress, String[] ToAddress, String[] AttachmentNames, Object[] AttachmentData) in C:\Documents and Settings\administrator.MLR\My Documents\Visual Studio 2005\Projects\DataExtractionService\DataExtractionService\Web References\uk.co.myserver\Reference.cs:line 111
   at DataExtractionService.APDataExtractor.EmailReport(String message, String subject) in C:\Documents and Settings\administrator.MLR\My Documents\Visual Studio 2005\Projects\DataExtractionService\DataExtractionService\APDataExtractor.cs:line 610
   at DataExtractionService.APDataExtractor.RunDataExtraction() in C:\Documents and Settings\administrator.MLR\My Documents\Visual Studio 2005\Projects\DataExtractionService\DataExtractionService\APDataExtractor.cs:line 63
   at DataExtractionService.DataExtractionService.HandleClientComm(Object client) in C:\Documents and Settings\administrator.MLR\My Documents\Visual Studio 2005\Projects\DataExtractionService\DataExtractionService\DataExtractionService.cs:line 96
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart(Object obj)

Web服务刚刚在“Web引用”下以正常方式添加到项目中。 Web服务在Studio中正常工作。

exe.config的相关部分如下所示(我必须更改服务器的名称,抱歉):

<applicationSettings>
<DataExtractionService.Properties.Settings>
  <setting name="DataExtractionService_uk_co_myserver_Service1"
    serializeAs="String">
    <value>https://myserver.co.uk/premieremailservice/Service1.asmx</value>
  </setting>
</DataExtractionService.Properties.Settings>
 </applicationSettings>

非常感谢。

1 个答案:

答案 0 :(得分:1)

Web服务在哪里运行?它需要什么类型的身份验证(如果有)?如果您的Windows服务在本地帐户(例如系统或网络服务)下运行,则它可能没有连接到远程服务器的必要权限。

如果是这种情况,则需要在域帐户下执行Windows服务,并授予该帐户与Web服务通信的权限,或完全删除身份验证。

当您在Visual Studio中执行代码时,您在自己的凭据上下文中运行,我认为这足以访问Web服务。