我刚刚使用 VS2010 重建了我的 WCF 解决方案,并将其上传到带有 IIS 7.5 的 Windows 2008 服务器上。出于某种原因,即使在清理了临时 ASP.NET 文件后,重新启动服务器 - http://www.mysite.com/myservice?xsd=xsd1(和所有其他 XSD 文件)也会显示旧模式。
结果我生成的 WSDL 没有用。
我在这里找到了这个讨论:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/6a9e48e3-25ec-4859-abe4-2b0a335b23ae/wcf-service-wont-update
但是我已经尝试过讨论上述内容,但它不起作用。我有一种感觉,这里缺少一些非常简单的东西。
更新:过了一会儿我发现这篇文章(更新服务参考不起作用),当我将整个编译的 WCF 解决方案移动到一个全新的 AppDirectory 中时,它打破了“无法加载程序集 xxxxx 或其依赖项之一。然后我检查了我的 Fusion 日志,并在其中一个日志文件中发现了这一点:
LOG: Assembly download was successful. Attempting setup of file:
C:\inetpub\wwwroot\my\path\to\lib.dll
LOG: Entering download cache setup phase.
LOG: Assembly Name is: XXXXXX, Version=1.0.4983.31160, Culture=neutral, PublicKeyToken=null
ERR: Setup failed with hr = 0x8007000b.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
解决方法:所以我不认为这是一个解决方案,但在
- 我创建了一个单独的解决方案 - 自托管 WCF 服务主机,
- 在那里添加了我所有的参考资料(我的 WCF 服务库就是其中之一),
- 构建自托管解决方案,
- 在服务器上运行自托管的 EXE,并在浏览器中运行设计时 URL。
- 能够看到正确生成的 WSDL 和 XSD 文件!
- 将必要的 DLL 放入我的 ASP.NET 应用程序目录的 bin 文件夹中。
- 刷新我的浏览器并在 XSD 中看到所需的更改!
我的猜测是,当我启动自托管服务并在浏览器中运行它时,新的 DLL 存储在我不知道的某个临时 ASP.NET 目录中。然后 IIS 使用该目录来执行 DLL。
如果有人能解释这在世界上是如何工作的,以及正确的方法是什么,我将不胜感激。
解决方案:
因此,经过我所有的麻烦,这就是发生的事情:
- 我使用 SVN 将文件传输到服务器上。
- 当我
svn up
在服务器上运行时,我解决了与旧文件的冲突。 - 因此,App Directory 包含旧文件,而新文件由于冲突而从未出现在那里。