【问题标题】:Created SOAP Service Reference in .NET using WSDL. The proxy class doesn't seem to expose the SOAP response使用 WSDL 在 .NET 中创建 SOAP 服务参考。代理类似乎没有公开 SOAP 响应
【发布时间】:2015-12-04 17:03:31
【问题描述】:

我正在用 ASP.NET/C#(.NET 4.6,VS 2015)编写一个 Web 服务,它需要:

  1. 接收 XML 数据,
  2. 解析 XML 数据,
  3. 使用解析后的数据调用单独的 SOAP 服务,
  4. 接收来自 SOAP 服务的响应,
  5. 处理来自 SOAP 服务的响应,并
  6. 将处理后的 XML 发送回调用方 应用

我承认我在编写 Web 服务方面是个新手。 1-3个完成。 5-6 将是微不足道的,因为我已经将“Hello World”类型的响应发送回调用应用程序。

我被困在#4。响应信封似乎无处可寻——调用外部 SOAP 服务没有错误,具有相同数据的相同 SOAP 调用使用 Fiddler 和 Postman 发送响应,因此外部 SOAP 服务很好。

关于#4,我添加了对现有 SOAP 服务的服务引用。我可以调用 Web 服务,但在调试和查看代理类时,我看不到任何访问响应信封或响应信封内的任何内容的方法。

我知道这是非常基本的,所以一定有我遗漏的东西。有没有人可以指点我的教程?几天来我一直在寻找解决方案,但没有任何乐趣。

我是否需要编辑服务引用才能返回数据?如果是这样,我该怎么做?

再次抱歉新手问题;非常感谢您。

总结:我调用的 SOAP 服务工作正常并且响应正确,但我找不到如何从 SOAP 响应信封中实际检索数据;调试时,我什至在任何地方都看不到 SOAP 响应信封。我确定我遗漏了一些非常基本的东西。


编辑:这是前面要求的一些代码,并有进一步的解释:

string fieldValue = _fieldPrefix + fieldContents + _fieldSuffix;  

ExternalSoapClient soapClient = new ExternalSoapClient(_endpointName);
soapClient.Execute(fieldValue);  

ExecuteResponseBody responseBody = new ExecuteResponseBody();  
string executeResult = responseBody.ExecuteResult;

我想我要问的问题是:我很确定我错过了将响应与执行联系起来的步骤。 SOAP 方法称为“Execute”,只有上面显示的一个字符串字段。

【问题讨论】:

  • 一般来说,您不会直接通过 WCF 访问 SOAP 响应信封。这些方法将返回一个类型(简单类型,如 string 或 int 或复杂类型),该类型被反序列化为底层 .NET 类型(即,对于字符串,您将获得一个字符串,对于复杂类型,您将上课)。您可以发布一些代码和您所看到的一些示例吗?
  • 感谢蒂姆的回复,请在上面的 OP 末尾查看我的编辑。

标签: c# asp.net web-services wcf soap


【解决方案1】:

您在代码示例中尝试完成的工作并不完全清楚,但我认为您正在寻找的是这样的:

string fieldValue = _fieldPrefix + fieldContents + _fieldSuffix;  

ExternalSoapClient soapClient = new ExternalSoapClient(_endpointName);
ExecuteResponseBody responseBody = soapClient.Execute(fieldValue);  

string executeResult = responseBody.ExecuteResult;

我期望Execute 返回一个ExecuteResponseBody 对象,该对象在.NET 框架中表示为一个类。该类的 ExecuteResult 属性应包含您要查找的值。

简而言之,您的代码应该将来自服务的响应分配给ExecuteResponseBody 对象,然后您就可以访问其中包含的数据。您当前的方法不是将 ExecuteResponseBody 对象连接到服务调用的结果 - 您正在创建一个新对象 调用之后(并且对调用返回的结果不做任何事情),所以您要查找的数据不会在新创建的对象中。

【讨论】:

  • 蒂姆,我认为你走在正确的轨道上,这两个对象之间的脱节是我试图解决的问题,所以谢谢你。问题是 Execute 方法返回一个字符串而不是 ExecuteResponseBody,并且该字符串为空。
  • 当您将鼠标悬停在soapClient.Execut 上时,intellisense 会说返回类型是什么?如果是字符串,则只需执行string executeResult = soapClient.Execute(fieldValue);
  • 好的,谢谢,有道理。我实际上已经尝试过了,但是得到了一个空字符串...我认为今天可能出现了一个新问题(昨天在使用 Postman/Fiddler 进行测试时没有这样做),Web 服务仅返回 与没有数据。我对编写 Web 服务客户端的不熟悉让我怀疑自己。我想当这个问题得到解决时,我会知道你的建议是否有效。现在我将其标记为“已回答”,如果事实证明还有其他我无法弄清楚的问题,我会再次发布。谢谢!
  • 当我在 Postman 中调试并将“fieldValue”的值复制到 SOAP 信封中时,我现在正在“executeResult”XML 字段中获取值,因此该问题现已解决。不幸的是,在我的服务中,soapClient.Execute(fieldValue) 仍然返回一个空 ("") 字符串。很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多