连接到 Salesforce 问题 C#

Connecting to Salesforce Problems C#

我收到以下错误,似乎无法弄清楚原因。

'System.InvalidOperationException' 类型的未处理异常发生在 System.Xml.dll

附加信息:无法生成临时 class(结果=1)。

错误 CS0030:无法将类型 'iDdataPrep.SFDC.ListViewRecordColumn[]' 转换为 'iDdataPrep.SFDC.ListViewRecordColumn'

错误 CS0030:无法将类型 'iDdataPrep.SFDC.ListViewRecordColumn[]' 转换为 'iDdataPrep.SFDC.ListViewRecordColumn'

错误 CS0029:无法将类型 'iDdataPrep.SFDC.ListViewRecordColumn' 隐式转换为 'iDdataPrep.SFDC.ListViewRecordColumn[]'

错误 CS0029:无法将类型 'iDdataPrep.SFDC.ListViewRecordColumn' 隐式转换为 'iDdataPrep.SFDC.ListViewRecordColumn[]'

这是我的代码:

public static void sfLogin()
    {
        string userName = "***";
        string password = "***";
        string securityToken = "***";

        SFDC.SforceService sfdcBinding = null;
        SFDC.LoginResult currentLoginResult = null;
        sfdcBinding = new SFDC.SforceService();
        try
        {
            currentLoginResult = sfdcBinding.login(userName, password);
        }
        catch (System.Web.Services.Protocols.SoapException ex)
        {
            sfdcBinding = null;
            MessageBox.Show(ex.Message);
        }
        catch(Exception ex)
        {
            sfdcBinding = null;
            MessageBox.Show(ex.Message);
        }
        sfdcBinding.Url = currentLoginResult.serverUrl;
        sfdcBinding.SessionHeaderValue = new SFDC.SessionHeader();
        sfdcBinding.SessionHeaderValue.sessionId = currentLoginResult.sessionId;
    }

this link.

中所述,由于 .NET 的 XmlSerializer 中的错误,某些 .Net 与 Salesforce 的集成确实失败了

解决方法是将以下元素添加到 Enterprise.WSDL.XML 文件中:

<xsd:attribute name="tmp" type="xsd:string" />

在 ListViewRecord 部分。您的 Enterprise.WSDL.XML 应如下所示:

<complexType name="ListViewRecord">
  <sequence>
    <element name="columns" type="tns:ListViewRecordColumn" maxOccurs="unbounded"/>
  </sequence>
  <b>
    <xsd:attribute name="tmp" type="xsd:string" />
  </b>
</complexType>

this link 中查看更多信息。

我刚 运行 遇到这个问题。这是我使用的解决方法。在从 wsdl(例如 partner.wsdl)生成代理文件之前,编辑该文件并向 ListViewRecord 定义添加一个虚拟字段。

<complexType name="ListViewRecord">
    <sequence>
        <element name="columns"                  type="tns:ListViewRecordColumn" minOccurs="1" maxOccurs="unbounded"/>
        <element name="dummy"                    type="xsd:int"/>
    </sequence>
</complexType>

当您使用 wsdl.exe 生成代理文件时,它将正确生成 类 ListViewRecord 和 ListViewRecordColumn。然后从生成的代码中删除虚拟字段,类 和属性将按应有的方式定义。

public partial class ListViewRecord {

    private ListViewRecordColumn[] columnsField;

    /// ** delete this member variable **
    private int dummyField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("columns")]
    public ListViewRecordColumn[] columns {
        get {
            return this.columnsField;
        }
        set {
            this.columnsField = value;
        }
    }

    /// ** delete this property **
    public int dummy {
        get {
            return this.dummyField;
        }
        set {
            this.dummyField = value;
        }
    }
}

Reference.cs 中有两个对 ListViewRecordColumn[][] 的引用。

将它们都更改为 ListViewRecordColumn[]