System.IndexOutOfRangeException 在 SalesForce OutBound 消息侦听器上

System.IndexOutOfRangeException on SalesForce OutBound Message Listener

我在 ASMX 中有一个网络服务,我正在尝试创建一个监听器,这是我在 webservice.cs 文件

中的内容
    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
class MyNotificationListener : NotificationBinding
{
    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]

    public notificationsResponse Notifications(notifications n)
    {
        Method.SendMail("info@domain.com", "test@domain.com", "Here I am ", "I am loaded ", "", "");// This is to see if it loaded
        notificationsResponse r = new notificationsResponse();
        r.Ack = true;
        return r;
    }

}

在我的出站消息配置中,我像这样调用此 Web 服务 www.domain/webservice.asmx/Notification 但是当我加载此服务时,我看到以下内容:

`System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Web.Services.Protocols.HttpServerType..ctor(Type type)
   at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)`

在我的配置文件中有以下内容

`<webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
        <add name="HttpSoap" />
      </protocols>
    </webServices>`

这是通知对象中的内容,它是按照 this 示例中的指示使用 wsdl.exe 从 WSDL 文件生成到 class 的。

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.7.3081.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://soap.sforce.com/2005/09/outbound")]
public partial class notifications
{

    private string organizationIdField;

    private string actionIdField;

    private string sessionIdField;

    private string enterpriseUrlField;

    private string partnerUrlField;

    private LeadNotification[] notificationField;

    /// <remarks/>
    public string OrganizationId {
        get {
            return this.organizationIdField;
        }
        set {
            this.organizationIdField = value;
        }
    }

    /// <remarks/>
    public string ActionId {
        get {
            return this.actionIdField;
        }
        set {
            this.actionIdField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
    public string SessionId {
        get {
            return this.sessionIdField;
        }
        set {
            this.sessionIdField = value;
        }
    }

    /// <remarks/>
    public string EnterpriseUrl {
        get {
            return this.enterpriseUrlField;
        }
        set {
            this.enterpriseUrlField = value;
        }
    }

    /// <remarks/>
    public string PartnerUrl {
        get {
            return this.partnerUrlField;
        }
        set {
            this.partnerUrlField = value;
        }
    }

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

我认为您无法访问此方法,因为您试图传递一个对象:"notifications n" 并使用 GET 请求。 你不能对这个方法做 GET。 无论如何,您描述的异常似乎并不相关。它在你的代码中。 尝试分享您用于使用此服务的代码

所以,在查看您的代码后,我发现在您的网络服务中,public 接口的实现被命名为错误,当我使用来自 salesforce 的 WSDL 生成 Class 时,它创建了接口它的名字是 INotificationBinding 而不是 NotificationBinding 这让我觉得你没有从 wsdl 中正确地创建 class 12=]。

您是否使用 wsdl.exe 创建了上述 class 通知?如果是这样,您是否确保它使用的是 /serverInterface 选项,这很重要(见下图), 在 salesforce 上,它清楚地提到您需要实施一个 class 来调用通知界面如果处理不当会报错System.IndexOutOfRangeException

请使用服务器接口选项重试。那应该可以解决问题。