2008-11-07 172 views
4

我有一个奇怪的问题。我有一个在2.0框架下编译的web服务,它正在被一个用1.1框架编译的windows应用程序使用。这工作得很好。现在,在将Web服务升级到3.5框架之后,Windows应用程序不再能够调用它。.Net 3.5 WebService无法通过.Net 1.1调用Windows应用程序

在3.5中创建一个小窗口应用程序作为测试能够调用Web服务没有问题,所以我知道它仍然有效。

代码没有任何改变,它只是编译为3.5项目而不是2.0项目。

对于那些谁关心我得到了错误回来,那就是:

的类型 'System.Net.WebException' 未处理的异常发生在 system.web.services.dll

其他信息:底层连接已关闭: 接收到 意外错误。

有什么我可以做的Web服务,使其向后兼容(如果这甚至是问题)?

[编辑]对以下答案的回应(迄今为止):重新发现没有工作,也没有删除和重新添加web服务。由于WSDLs是相同的,我不相信这是一个SOAP问题(都显示SOAP 1.2)。从服务器浏览到web服务工作得很好。

回答

1

尝试'重新发现'在.NET 1.1中的Web服务(可能只是一个测试应用程序),看看问题是否存在。

+0

这并未解决问题。我甚至尝试删除引用并重新添加Web引用,问题仍然存在。 谢谢反正! – 2008-11-07 15:38:50

0

你可以直接在IIS上安装Web服务吗?如果没有,请检查IIS中的应用程序配置。您必须切换ASP.NET的版本。

+0

是的,浏览到Web服务没问题。我可以通过asmx接口从服务器执行每个方法。 – 2008-11-07 15:44:20

1

它可能是SOAP 1.0与SOAP 1.1。 3.5服务可能使用1.1或1.2,默认情况下,我认为可以在web.config绑定中进行配置。

+0

从原始Web服务到新Web服务的wsdls是相同的。我不相信这是问题。 谢谢反正! – 2008-11-07 15:43:10

0

作为额外的“完整性检查”,3.5 web服务是否可以通过soapUI成功调用?

+0

1.1应用程序能否成功调用3.5版中未升级的Web服务?例如,创建一个新的3.5 Web服务,添加一个返回字符串的HelloWorld方法,并查看是否可以从1.1应用程序调用该方法而不会出错。 – 2008-11-15 01:21:27

1

这可能是一个KeepAlive问题(例如,通过代理)。作为一个测试,将下面的代码添加到客户端生成的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; 
    } 
+0

我试过这个,但是这也没有帮助。 – 2008-11-12 20:18:17

0

我遇到了这个问题,并通过在服务上强制域名声明来解决它。

[webservice] .Credentials = System.Net.CredentialCache.DefaultCredentials;

OR

[web服务] .Credentials =新System.Net.NetworkCredential([用户],[PWD],[域]);

相关问题