作为ASMX公开的WCF服务将不接受参数

时间:2010-07-01 07:53:31

标签: wcf delphi web-services .net-4.0 asmx

我有一个在Delphi 2006中开发的服务器/客户端应用程序。客户端是Win32,Server是.net 1.1 webservice。

我们正在更新此项目,但必须以较小的步骤完成。我从服务器开始,在VS2010(C#.net 4.0)中创建了一个WCF项目。第一步是在不更改客户端的情况下使服务器在WCF中运行。所以我使用了Facade模式,创建了一个类似于旧的delphi Webservice的接口,添加了对旧的.net 1.1 dll的引用,在我的实现中我只调用了旧的.net 1.1代码。

下一步更新客户端上的代理类。这失败了。 WSDL导入器没有正确理解basicHttpBinding,因此生成的代理类无法替换现有代理。

经过一番研究后,我找到了这篇博文。

http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html

这很有效,ASMX WSDL与旧的.net 1.1没什么不同,所以一切都很好。

但事实并非如此。在测试新服务时,我发现服务器上的所有参数都为空/空。我在客户端上尝试使用Fiddler,参数存在于发送到服务器的XML中。

所以我被困住了。任何关于如何解决这个问题的想法都将非常感激。是否有任何代码可以有用,看看然后让我知道。

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,网络服务asmx ......某些数据正在失去价值。如果使用分层数据,则可能需要使用XmlInclude属性声明内部或继承的对象。例如,如果您有一个在您的服务和Customer子类中使用的User类,则可能需要将Customer类声明为该服务(如果它不直接在Web方法中使用)。你可以这样做。

[XmlInclude(typeof(Customer))]
public class Service : WebService

当然,这可能与此无关,所以如果是这样的话,祝你好运。 :)

答案 1 :(得分:0)

确认新服务中的参数名称与旧服务中的名称匹配。如果您更改了参数名称,它们将不会从XML映射,因此在执行代码中将为null。

答案 2 :(得分:0)

将KnownType属性添加到子类