我能够在控制器的ActionMethod中查询Web服务,但无法在应用程序启动时查询它。
问题描述:
我正在ASP.net MVC 5上开发WebApplication,它利用从SOAP Web服务Autotask API
检索的数据。我在这里说一下,在用户进行其他操作之前,有些记录必须从API加载/缓存。
因此,对于WebApp& web服务,
Service Reference
并提供了WSDL。ActionMethods
中调用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.
,说明用户名&密码错误'
但我相信并非实际情况。由于两个坚实的原因
服务器堆栈跟踪: 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中查询它
答案 0 :(得分:0)
您有响应超时异常,请尝试增加receiveTimeout
<bindings>
<basicHttpBinding>
<binding name="ATWS15" />
<binding name="IncreasedTimeout" sendTimeout="00:10:00" receiveTimeout="00:10:00"></binding>
</basicHttpBinding>
</bindings>