连接到 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[]
。
我收到以下错误,似乎无法弄清楚原因。
'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[]
。