【问题标题】:Calling web service and getting null for response object调用 Web 服务并为响应对象获取 null
【发布时间】:2015-04-02 00:34:04
【问题描述】:

我正在使用用 Java/Axis 编写的第 3 方 Web 服务。我与 WCF 合作不多,所以我试图通过这个来感受我的方式。我能够从 wsdl 生成类并使用 Fiddler 我能够看到对服务的调用,并返回响应。但是在我的代码中,我的响应是空的,我不确定为什么我没有看到响应。我确实阅读了一篇关于命名空间的文章,并尝试更新它,但没有运气。下面是生成的类、wsdl 和来自 Web 服务的响应。自动生成的类有问题吗?为什么我的响应没有被 C# 代码使用?

这是生成的类。我只包含了我正在调用的方法,因为这个文件超过 5000 行,并且大部分不会被我们使用。

[GeneratedCodeAttribute("wsdl", "4.0.30319.18020")]
[DebuggerStepThroughAttribute()]
[DesignerCategoryAttribute("code")]
[WebServiceBindingAttribute(Name = "grandeFacadeSoapBinding", Namespace = "http://localhost:8081/axis/services/grandeFacade")]
public partial class grandeFacadeService : SoapHttpClientProtocol
{
    private SendOrPostCallback EnterpriseObjectsOperationCompleted;

    private SendOrPostCallback EnterpriseObjecOperationCompleted;

    public grandeFacadeService()
    {
        this.Url = "http://example.com:8081/axis/services/grandeFacade";
    }       

    public event EnterpriseObjectsCompletedEventHandler EnterpriseObjectsCompleted;

    public event EnterpriseObjecCompletedEventHandler EnterpriseObjecCompleted;

    [SoapDocumentMethodAttribute("", RequestNamespace = "http://localhost:8180/grandeFacade/services/grandeFacade", ResponseNamespace = "http://localhost:8180/grandeFacade/services/grandeFacade", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
    [return: XmlElementAttribute("EnterpriseObjectsReturn")]
    public WebServiceResp EnterpriseObjects([Serialization.XmlElementAttribute("EnterpriseObjValues")] EnterpriseObjValues[] EnterpriseObjValues)
    {
        object[] results = this.Invoke("EnterpriseObjects", new object[] { EnterpriseObjValues });
        return ((WebServiceResp)(results[0]));
    }

    public IAsyncResult BeginEnterpriseObjects(EnterpriseObjValues[] EnterpriseObjValues, AsyncCallback callback, object asyncState)
    {
        return this.BeginInvoke("EnterpriseObjects", new object[] { EnterpriseObjValues}, callback, asyncState);
    }

    public WebServiceResp EndEnterpriseObjects(IAsyncResult asyncResult)
    {
        object[] results = this.EndInvoke(asyncResult);
        return ((WebServiceResp)(results[0]));
    }

    public void EnterpriseObjectsAsync(EnterpriseObjValues[] EnterpriseObjValues)
    {
        this.EnterpriseObjectsAsync(EnterpriseObjValues, null);
    }

    public void EnterpriseObjectsAsync(EnterpriseObjValues[] EnterpriseObjValues, object userState)
    {
        if ((this.EnterpriseObjectsOperationCompleted == null))
        {
            this.EnterpriseObjectsOperationCompleted = new SendOrPostCallback(this.OnEnterpriseObjectsOperationCompleted);
        }
        this.InvokeAsync("EnterpriseObjects", new object[] { EnterpriseObjValues}, this.EnterpriseObjectsOperationCompleted, userState);
    }

    private void OnEnterpriseObjectsOperationCompleted(object arg)
    {
        if ((this.EnterpriseObjectsCompleted != null))
        {
            InvokeCompletedEventArgs invokeArgs = ((InvokeCompletedEventArgs)(arg));
            this.EnterpriseObjectsCompleted(this, new EnterpriseObjectsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }

    [SoapDocumentMethodAttribute("", RequestNamespace = "http://localhost:8180/grandeFacade/services/grandeFacade", ResponseNamespace = "http://localhost:8180/grandeFacade/services/grandeFacade", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
    [return: XmlElementAttribute("EnterpriseObjecReturn")]
    public wsResponse EnterpriseObjec(EnterpriseObjValues EnterpriseObjValues)
    {
        object[] results = this.Invoke("EnterpriseObjec", new object[] { EnterpriseObjValues });
        return ((wsResponse)(results[0]));
    }

    public IAsyncResult BeginEnterpriseObjec(EnterpriseObjValues EnterpriseObjValues, AsyncCallback callback, object asyncState)
    {
        return this.BeginInvoke("EnterpriseObjec", new object[] { EnterpriseObjValues}, callback, asyncState);
    }

    public wsResponse EndEnterpriseObjec(IAsyncResult asyncResult)
    {
        object[] results = this.EndInvoke(asyncResult);
        return ((wsResponse)(results[0]));
    }

    public void EnterpriseObjecAsync(EnterpriseObjValues EnterpriseObjValues)
    {
        this.EnterpriseObjecAsync(EnterpriseObjValues, null);
    }

    public void EnterpriseObjecAsync(EnterpriseObjValues EnterpriseObjValues, object userState)
    {
        if ((this.EnterpriseObjecOperationCompleted == null))
        {
            this.EnterpriseObjecOperationCompleted = new SendOrPostCallback(this.OnEnterpriseObjecOperationCompleted);
        }
        this.InvokeAsync("EnterpriseObjec", new object[] { EnterpriseObjValues}, this.EnterpriseObjecOperationCompleted, userState);
    }

    private void OnEnterpriseObjecOperationCompleted(object arg)
    {
        if ((this.EnterpriseObjecCompleted != null))
        {
            InvokeCompletedEventArgs invokeArgs = ((InvokeCompletedEventArgs)(arg));
            this.EnterpriseObjecCompleted(this, new EnterpriseObjecCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }
}

这是 WSDL 的 URL。不确定这是否可以在我们的网络之外访问。

http://sdrsafposent1d:8081/axis/services/grandeFacade?wsdl

这是 Fiddler 捕获的响应。我的另一个问题是响应我看到有一个 Java 异常和一些丑陋的胡言乱语。这会导致响应未被消耗的问题吗?

2000
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <EnterpriseObjectsResponse xmlns="http://localhost:8180/grandeFacade/services/grandeFacade">
   <EnterpriseObjectsReturn>
    <wsResponse>
     <action>INSERT</action>
     <documentID>1000</documentID>
     <errorMsg></errorMsg>
     <objectName>enca_orden_compra</objectName>
     <stackTrace></stackTrace>
     <status>Not processed</status>
     <transactionID>1</transactionID>
    </wsResponse>
    <wsResponse>
     <action>INSERT</action>
     <documentID>1000</documentID>
     <errorMsg></errorMsg>
     <objectName>det_orden_compra</objectName>
     <stackTrace></stackTrace>
     <status>Not processed</status>
     <transactionID>1</transactionID>
    </wsResponse>
    <wsResponse>
     <action>update</action>
     <documentID>1000</documentID>
     <errorMsg></errorMsg>
     <objectName>enca_orden_compra</objectName>
     <stackTrace></stackTrace>
     <status>Not processed</status>
     <transactionID>1</transactionID>
    </wsResponse>
    <wsResponse>
     <action>update</action>
     <documentID>1000</documentID>
     <errorMsg></errorMsg>
     <objectName>enca_orden_compra</objectName>
     <stackTrace></stackTrace>
     <status>Not processed</status>
     <transactionID>1</transactionID>
    </wsResponse>
    <wsResponse>
     <action>update</action>
     <documentID>1000</documentID>
     <errorMsg></errorMsg>
     <objectName>enca_orden_compra</objectName>
     <stackTrace></stackTrace>
     <status>Not processed</status>
     <transactionID>1</transactionID>
    </wsResponse>
    <wsResponse>
     <action>Informative</action>
     <documentID>Footer</documentID>
     <errorMsg>NULL</errorMsg>
     <objectName></objectName>
     <stackTrace>none
*******************************************************************************
* Object Name: det_orden_compra
* Field Name: Unidades_ordenadas
* Field Value: 1
* Process Step: Getting primary key 
* Possible Error: Incorrect field name or value data from the key
*******************************************************************************
java.lang.NullPointerException</stackTrace>
     <status>error</status>
     <transactionID>

***********************************************************************************************
&lt;EnterpriseObjsValues&gt;
&lt;EnterpriseObjValues&gt;
   &lt;objectName&gt;enca_orden_compra&lt;/objectName&gt;
   &lt;action&gt;INSERT&lt;/action&gt;
   &lt;documentID&gt;1000&lt;/documentID&gt;
   &lt;transactionID&gt;1&lt;/transactionID&gt;
   &lt;source&gt;ORACLE&lt;/source&gt;
   &lt;whereClasue&gt;sucursal = XYZ AND orden = 34567&lt;/whereClasue&gt;
   &lt;objectDetail&gt;
      &lt;item&gt;
         &lt;fieldName&gt;external_id&lt;/fieldName&gt;
         &lt;fieldValue&gt;345888&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sucursal&lt;/fieldName&gt;
         &lt;fieldValue&gt;XYZ&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;proveedor&lt;/fieldName&gt;
         &lt;fieldValue&gt;45454&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;comprador&lt;/fieldName&gt;
         &lt;fieldValue&gt;1001&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;tipo_distribucion&lt;/fieldName&gt;
         &lt;fieldValue&gt;DD&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;order_origin&lt;/fieldName&gt;
         &lt;fieldValue&gt;C&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;document_status&lt;/fieldName&gt;
         &lt;fieldValue&gt;5&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;fecha_orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;3/13/2015 12:53:54 PM&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;fecha_entrada&lt;/fieldName&gt;
         &lt;fieldValue&gt;3/20/2015 12:53:54 PM&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;fecha_cancelacion&lt;/fieldName&gt;
         &lt;fieldValue&gt;3/27/2015 12:53:54 PM&lt;/fieldValue&gt;
      &lt;/item&gt;
   &lt;/objectDetail&gt;
&lt;/EnterpriseObjValues&gt;
&lt;EnterpriseObjValues&gt;
   &lt;objectName&gt;det_orden_compra&lt;/objectName&gt;
   &lt;action&gt;INSERT&lt;/action&gt;
   &lt;documentID&gt;1000&lt;/documentID&gt;
   &lt;transactionID&gt;1&lt;/transactionID&gt;
   &lt;source&gt;ORACLE&lt;/source&gt;
   &lt;whereClasue&gt;sucursal =  AND orden = 34567 AND Articulo = '1'&lt;/whereClasue&gt;
   &lt;objectDetail&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sucursal&lt;/fieldName&gt;
         &lt;fieldValue&gt;&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;Articulo&lt;/fieldName&gt;
         &lt;fieldValue&gt;1&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;Unidades_ordenadas&lt;/fieldName&gt;
         &lt;fieldValue&gt;null&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;Costo&lt;/fieldName&gt;
         &lt;fieldValue&gt;13-MAR-15&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;confirmed_quantity&lt;/fieldName&gt;
         &lt;fieldValue&gt;null&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;confirmation_date&lt;/fieldName&gt;
         &lt;fieldValue&gt;3/20/2015 12:53:54 PM&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;confirmation_number&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;document_status&lt;/fieldName&gt;
         &lt;fieldValue&gt;5&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sequence&lt;/fieldName&gt;
         &lt;fieldValue&gt;4567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;requisition&lt;/fieldName&gt;
         &lt;fieldValue&gt;1&lt;/fieldValue&gt;
      &lt;/item&gt;
   &lt;/objectDetail&gt;
&lt;/EnterpriseObjValues&gt;
&lt;EnterpriseObjValues&gt;
   &lt;objectName&gt;enca_orden_compra&lt;/objectName&gt;
   &lt;action&gt;update&lt;/action&gt;
   &lt;documentID&gt;1000&lt;/documentID&gt;
   &lt;transactionID&gt;1&lt;/transactionID&gt;
   &lt;source&gt;ORACLE&lt;/source&gt;
   &lt;whereClasue&gt;sucursal =  AND orden = 34567&lt;/whereClasue&gt;
   &lt;objectDetail&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sucursal&lt;/fieldName&gt;
         &lt;fieldValue&gt;&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;status_proceso&lt;/fieldName&gt;
         &lt;fieldValue&gt;18&lt;/fieldValue&gt;
      &lt;/item&gt;
   &lt;/objectDetail&gt;
&lt;/EnterpriseObjValues&gt;
&lt;EnterpriseObjValues&gt;
   &lt;objectName&gt;enca_orden_compra&lt;/objectName&gt;
   &lt;action&gt;update&lt;/action&gt;
   &lt;documentID&gt;1000&lt;/documentID&gt;
   &lt;transactionID&gt;1&lt;/transactionID&gt;
   &lt;source&gt;ORACLE&lt;/source&gt;
   &lt;whereClasue&gt;sucursal =  AND orden = 34567&lt;/whereClasue&gt;
   &lt;objectDetail&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sucursal&lt;/fieldName&gt;
         &lt;fieldValue&gt;&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;
554
/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;status_proceso&lt;/fieldName&gt;
         &lt;fieldValue&gt;19&lt;/fieldValue&gt;
      &lt;/item&gt;
   &lt;/objectDetail&gt;
&lt;/EnterpriseObjValues&gt;
&lt;EnterpriseObjValues&gt;
   &lt;objectName&gt;enca_orden_compra&lt;/objectName&gt;
   &lt;action&gt;update&lt;/action&gt;
   &lt;documentID&gt;1000&lt;/documentID&gt;
   &lt;transactionID&gt;1&lt;/transactionID&gt;
   &lt;source&gt;ORACLE&lt;/source&gt;
   &lt;whereClasue&gt;sucursal =  AND orden = 34567&lt;/whereClasue&gt;
   &lt;objectDetail&gt;
      &lt;item&gt;
         &lt;fieldName&gt;sucursal&lt;/fieldName&gt;
         &lt;fieldValue&gt;&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;orden&lt;/fieldName&gt;
         &lt;fieldValue&gt;34567&lt;/fieldValue&gt;
      &lt;/item&gt;
      &lt;item&gt;
         &lt;fieldName&gt;status_proceso&lt;/fieldName&gt;
         &lt;fieldValue&gt;3&lt;/fieldValue&gt;
      &lt;/item&gt;
   &lt;/objectDetail&gt;
&lt;/EnterpriseObjValues&gt;
&lt;/EnterpriseObjsValues&gt;

***********************************************************************************************

</transactionID>
    </wsResponse>
   </EnterpriseObjectsReturn>
  </EnterpriseObjectsResponse>
 </soapenv:Body>
</soapenv:Envelope>
0

这是我进行调用并捕获响应的代码块。

grandeFacadeService grandeFacadeService serv = new grandeFacadeService();
WebServiceResp response = serv.EnterpriseObjects(enterpriseObjValueslist);
wsResponse[] responseArray= response.wsResponse;

【问题讨论】:

  • 您的 WSDL 链接无法访问,但实际肥皂信封之前的 2000 和之后的 0 是可疑的。

标签: c# wcf soap


【解决方案1】:

问题原来是 xml 本身。如果您在中途查看 xml,看起来他们的响应正在解码大于和小于。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多