使用WSDL在.NET中创建SOAP服务引用。代理类似乎没有公开SOAP响应

时间:2015-12-04 17:03:31

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

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

  1. 接收XML数据,
  2. 解析XML数据
  3. 使用已解析的数据来调用单独的SOAP服务,
  4. 从SOAP服务接收响应,
  5. 操纵SOAP服务的响应,
  6. 将操纵的XML发送回调用 应用
  7. 我承认我在编写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”,只有上面显示的一个字符串字段。

1 个答案:

答案 0 :(得分:0)

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

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对象连接到服务调用的结果 - 您在调用之后创建一个新对象(并且对从()),因此您要查找的数据不会出现在新创建的对象中。