我有一个奇怪的问题。我有一个在2.0框架下编译的Web服务,该框架由使用1.1框架编译的Windows应用程序使用。这很好用。现在,在将Web服务升级到3.5框架后,Windows应用程序将无法再调用它。
在3.5中创建一个小的Windows应用程序作为测试能够毫无问题地调用Web服务,所以我知道它仍然有用。
代码中没有任何变化,它只是编译为3.5项目而不是2.0项目。
对于那些关心我得到的错误的人来说,就是这样:
未处理的类型异常 'System.Net.WebException'发生在 system.web.services.dll
其他信息:基础连接已关闭:An a上发生意外错误 接收。
我可以对Web服务做些什么来使其向后兼容(如果这甚至是问题)?
[编辑]回复以下答案(到目前为止):重新发现不起作用,也没有删除和重新添加Web服务。我不相信这是一个SOAP问题,因为WSDL是相同的(都显示SOAP 1.2)。从服务器浏览到web服务工作正常。
答案 0 :(得分:1)
尝试'重新发现'.NET 1.1中的Web服务(可能只是一个测试应用程序)并查看问题是否仍然存在。
答案 1 :(得分:1)
它可能是SOAP 1.0与SOAP 1.1。默认情况下,3.5服务可能使用1.1或1.2,我认为可以在web.config绑定中配置。
答案 2 :(得分:1)
KeepAlives可能存在问题(例如,通过代理)。作为测试,将下面的代码添加到客户端中生成的Reference.cs(丑陋 - 是的)。我在使用Fiddler(它是一个代理)来测试客户端和服务器之间的通信时遇到了这个问题。
// Put this override in the generated Reference.cs of the client proxy
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
webRequest.KeepAlive = false;
webRequest.ProtocolVersion = HttpVersion.Version10;
return webRequest;
}
答案 3 :(得分:0)
您可以直接在IIS安装上使用Web服务吗?如果没有,请检查IIS中的应用程序配置。您必须切换ASP.NET的版本。
答案 4 :(得分:0)
作为额外的“健全性检查”,soapUI是否可以成功调用3.5 Web服务?
答案 5 :(得分:0)
我遇到了这个并通过强制服务上的域名来解决它。
[webservice] .Credentials = System.Net.CredentialCache.DefaultCredentials;
OR
[webservice] .Credentials = new System.Net.NetworkCredential([user],[pwd],[domain]);