Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf WSDL web引用客户端和alter方法返回soap字符串_Wcf_Soap_Wsdl_Client - Fatal编程技术网

Wcf WSDL web引用客户端和alter方法返回soap字符串

Wcf WSDL web引用客户端和alter方法返回soap字符串,wcf,soap,wsdl,client,Wcf,Soap,Wsdl,Client,首先,我在WCF/WSDL领域是完全的noob,所以请耐心等待我 好的,我有一个用于复杂消息类型的WSDL和XSD,我在C#console应用程序中生成了一个测试客户机。我向reference.cs中生成的WSDL GET代码添加了一个web引用 我在reference.cs中调用了可用的方法,fine works完美无瑕。我在reference.cs中的方法上添加了soap跟踪扩展来记录soap请求/响应,效果很好 在客户机中,我得到了WSDL复杂类型的类对象,在该对象中,无论是同步调用还是异

首先,我在WCF/WSDL领域是完全的noob,所以请耐心等待我

好的,我有一个用于复杂消息类型的WSDL和XSD,我在C#console应用程序中生成了一个测试客户机。我向reference.cs中生成的WSDL GET代码添加了一个web引用

我在reference.cs中调用了可用的方法,fine works完美无瑕。我在reference.cs中的方法上添加了soap跟踪扩展来记录soap请求/响应,效果很好

在客户机中,我得到了WSDL复杂类型的类对象,在该对象中,无论是同步调用还是异步调用,都可以很好地返回所有内容

这就是我想要/试图做的,我希望方法返回的不是反序列化的类对象,而是soap字符串,就像它们在流中和反序列化之前接收一样

如何更改方法以返回soap字符串?这不是访问它们(我成功地做到了),而是直接从方法返回

请给我指出正确的方向,否则我必须去实现一个soapclient,这是我试图避免的

谢谢你的帮助。如果我需要澄清,请告诉我

更新:

好的,先生,我就是这么做的:

使用svcutil从WSDL生成一个类,然后:

ServiceClient1 sc1 = new ServiceClient1();
TestResponseClass trc1 = sc1.method1("Testinput");
System.Xml.Serialization.XmlSerializer x = new    System.Xml.Serialization.XmlSerializer(typeof(TestResponseClass ),"http://xxx.xxx.xxx.local/Service1.wsdl");
StringWriter stringWriter = new StringWriter();
x.Serialize(stringWriter, trc1);
Console.Write(stringWriter.ToString());  

这样我得到了xml响应。更接近我想要的,我将尝试将其转换为soap响应。我希望我现在正走在正确的轨道上。如果没有,请更正。学习和快速学习……我想你可能有点困惑了。不要使用网络引用。这是传统的ASMX技术,已被WCF和“添加服务引用”所取代

请勿将ASMX用于新开发


我看到了你的更新,你确实感到困惑

您的代码有:

ServiceClient1 sc1 = new ServiceClient1();
TestResponseClass trc1 = sc1.method1("Testinput");

就这样。你完了。您已经向服务发送了SOAP消息,并且已经收到响应。根本不需要使用XML。

谢谢,非常感谢您的回答,好的,我也尝试过使用服务参考。同样,我想修改我的方法代码,以返回字符串或流中的soap(我认为它只对SoapExtension公开)。根据WSDL中使用的模式,再次将响应类对象反序列化回soap,这是好方法还是好方法?对我来说这听起来很奇怪,因为WCF已经从流中序列化了它,我希望WCF最好不要序列化它。很抱歉,但您应该给出更多细节,因为这没有多大意义。您不能将SoapExtension与WCF一起使用。“返回SOAP字符串”是什么意思?一般来说,您不需要或不想返回SOAP字符串。再次感谢John,我想要的是我的soapdocument属性方法,要返回我的SOAP xml字符串或流,它现在返回的是一个复杂类型的类对象(从WSDL生成)(这是它应该是什么样子)。这就是您的困惑所在。您根本不应该使用
[SoapDocumentMethod]
。您根本不应该编写ASMX服务。请参阅“”,其中显示了如何使用正确的技术创建服务,然后显示了如何使用它。感谢John指出我的观点,如果我得到了所需的,我将按照您的示例在明天报告。再次感谢。你为什么想要“SOAP回复”?谢谢你的回复。你让我走上了正轨。解释起来有点复杂,但简而言之,将有另一个客户机连接到我的客户机,他们希望使用soap信封,但我再次考虑,我最好像上面那样使用XML。请您检查一下上述序列化回XML的方法是否正确有效(尽管它确实为我提供了正确的XML).谢谢你John.这个客户和你的客户有什么联系?如果通过网络,则没有问题。您仍然不需要使用XML。感谢您的正面回复。我发现我不需要其他客户机使用soap消息,只有XML可以这样做,序列化回XML就足够了。最后一个问题,由于双重序列化/反序列化,我怀疑这是正确的方法吗?其他客户端将有一个dll来调用thorugh。