我有两个托管在IIS中的WCF服务在服务器上运行: Ogre (C#)和Troll (VB.Net)。(是的,这是他们的真名。)在这个过程中,我在Troll服务中调用一个web方法。Troll反过来调用Ogre作为支持函数。
当Troll试图实例化Ogre服务客户端时:
Dim ogre As New OgreService.OgreClient 引发异常。这一例外是
Operations marked with IsOneWay=true must not declare output parameters, by-reference parameters or return values. 现在,食人魔确实有一些方法被定义为一种方式。但是,它们都返回void,没有一个具有输出参数。有些人确实接受一个对象(在数据契约中定义)作为参数。还有其他几个程序可以毫无问题地调用食人魔。此外,如果我在我的开发系统上运行Troll,在Visual中,它在服务器上调用ogre没有问题。我还可以使用WCF客户端从我的开发机器调用服务器上的ogre,没有问题。
我知道这一定是一个配置问题,但我不能为我的生活弄清楚它是什么。IIS托管的WCF服务在同一台计算机上调用另一个IIS承载的WCF服务是否存在问题?
我甚至不确定我能提供哪些数据可能有帮助,因为这只是一个正在经历问题的配置。任何关于可能发生的事情的想法都会受到欢迎。
谢谢。
事实证明,这是Visual生成的服务代理的问题。在配置服务引用时,我意外地检查了“允许生成异步操作”。选择了生成基于任务的操作的选项。
这导致使用返回值的单向装饰定义方法。
这就是造成问题的原因。因为我不需要异步操作,所以我不检查这个选项,问题就解决了。
它确实引发了其他问题,比如“为什么它在我的开发机器上运行时没有失败?”以及“为什么自动生成的客户端生成无效的代码?”但这是另一次讨论。
发布于 2016-03-28 17:58:59
我遇到了同样的问题,下面是对我有用的东西。在开发框上一切正常,但是有关IsOneWay的例外是在deployment上。将.Net框架的4.5.1升级到部署环境中,修复了它。
https://stackoverflow.com/questions/17886766
复制相似问题