WCF服务客户端的实例化会引发有关IsOneWay操作的异常

时间:2013-07-26 16:46:26

标签: .net wcf runtime-error

我在服务器上运行的IIS中托管了两个WCF服务;食人魔(C#)和巨魔(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 Studio中,它没有在服务器上调用食人魔时出现问题。我也可以使用WCF测试客户端从我的开发机器上调用服务器上的食人魔,并且没有任何问题。

我知道这必须是一个配置问题,但我不能为我的生活弄清楚它是什么。 IIS托管的WCF服务在同一台计算机上调用另一个IIS托管的WCF服务是否有任何问题?

我甚至不确定我可以提供哪些可能有帮助的数据,因为它只是遇到问题的一种配置。任何关于可能发生的事情的想法都会受到赞赏。

感谢。


事实证明,这是Visual Studio生成的服务代理的问题。当我配置服务引用时,我意外地检查了“允许生成异步操作”。选择了生成基于任务的操作的选项。

这导致使用返回值的单向装饰定义方法。

这就是导致问题的原因。由于我不需要异步操作,我只是取消选中该选项,问题就消失了。

它确实提出了其他问题,例如“为什么从我的开发机器运行时它没有失败?”和“为什么自动生成的客户端生成无效的代码?”但这是另一个讨论。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这里有什么对我有用。在开发框上一切正常,但关于IsOneWay的例外是在部署环境中。在部署环境上升级4.5.1的.Net框架修复了它。