我有一个在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中。
所以我被困住了。任何关于如何解决这个问题的想法都将非常感激。是否有任何代码可以有用,看看然后让我知道。
答案 0 :(得分:1)
我遇到了类似的问题,网络服务asmx ......某些数据正在失去价值。如果使用分层数据,则可能需要使用XmlInclude属性声明内部或继承的对象。例如,如果您有一个在您的服务和Customer子类中使用的User类,则可能需要将Customer类声明为该服务(如果它不直接在Web方法中使用)。你可以这样做。
[XmlInclude(typeof(Customer))]
public class Service : WebService
当然,这可能与此无关,所以如果是这样的话,祝你好运。 :)
答案 1 :(得分:0)
确认新服务中的参数名称与旧服务中的名称匹配。如果您更改了参数名称,它们将不会从XML映射,因此在执行代码中将为null。
答案 2 :(得分:0)
将KnownType属性添加到子类