如何在从WebService

时间:2017-07-05 16:04:59

标签: c# web-services asp.net-mvc-5 timeout

我能够在控制器的ActionMethod中查询Web服务,但无法在应用程序启动时查询它。

问题描述: 我正在ASP.net MVC 5上开发WebApplication,它利用从SOAP Web服务Autotask API检索的数据。我在这里说一下,在用户进行其他操作之前,有些记录必须从API加载/缓存。

因此,对于WebApp& web服务,

  • 我添加了Service Reference并提供了WSDL。
  • 从中创建代理类,在开发过程中,我一直在调用Controller ActionMethods中调用Webservice。
  • 因此,在View中,当用户单击给定链接时,会调用Webservice。检索到的记录列表缓存在应用程序中,以便下次我们不必再次调用Webservice。它工作正常。

我想要实现的目标

在生产中,在应用程序启动时加载这些记录是理想的。

所以我将对Webservice的调用从控制器的ActionMethod转移到Application_Start()中的Global.asax.cs方法。

但是当我启动应用程序时以及从Webservice查询数据时。它导致错误

  

内容类型text / html;响应消息的charset = utf-8与绑定的内容类型不匹配(text / xml; charset = utf-8)

由于我希望以XML格式记录数据,因此服务器返回错误The remote server returned an error: (500) Internal Server Error.,说明用户名&密码错误'

但我相信并非实际情况。由于两个坚实的原因

  1. 我已成功使用Controller的ActionMethod中的相同凭据连接到Webservice,如上所述。
  2. 由于以下例外情况。
  3.   

    服务器堆栈跟踪:      at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request,HttpWebResponse response,HttpChannelFactory 1 factory, WebException responseException, ChannelBinding channelBinding) at System.ServiceModel.Channels.HttpChannelFactory 1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)      在System.ServiceModel.Channels.RequestChannel.Request(消息消息,TimeSpan超时)      在System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息消息,TimeSpan超时)      在System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime operation,Object [] ins,Object [] outs,TimeSpan timeout)      在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)      在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

    也有内部异常。

      

    at System.Net.HttpWebRequest.GetResponse()      at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

    对我而言,它表明请求超时已过期。我尝试将绑定配置修改为以下内容,如此处WCF Service, How to increase the timeout?

    中所述
    <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="ATWS15" />
        <binding name="IncreasedTimeout" sendTimeout="00:10:00"></binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://webservices.address.toApi.net/atws.asmx"
        binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout" contract="AutoTaskProxy.ATWS15"
         />
    </client>
    

    如果有人可以帮助我,我在这里做错了什么。我能够在控制器的ActionMethod中查询webservice,但无法在Application Startup中查询它

1 个答案:

答案 0 :(得分:0)

您有响应超时异常,请尝试增加receiveTimeout

<bindings>
  <basicHttpBinding>
    <binding name="ATWS15" />
    <binding name="IncreasedTimeout" sendTimeout="00:10:00" receiveTimeout="00:10:00"></binding>
  </basicHttpBinding>
</bindings>