System.IndexOutOfRangeException в SalesForce OutBound Message Listener - PullRequest
1 голос
/ 07 марта 2019

У меня есть веб-сервис в 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;
    }

}

в конфигурации моего исходящего сообщения. Я называю этот веб-сервис следующим образом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>`

Вот что у меня есть в Объекте Уведомления этобыл создан из файла WSDL для класса с использованием wsdl.exe, как указано в этом примере.

[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;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Итак, просмотрев ваш код, я вижу, что в вашем веб-сервисе реализация открытого интерфейса названа неправильно, когда я сгенерировал класс с WSDL из salesforce, он создает интерфейс и его имя INotificationBinding не NotificationBinding это заставляет меня думать, что вы не создали класс должным образом из wsdl, в приведенном выше примере, который вы используете, говорится, что он использует wsdl.exe /serverInterface leads.wsdl.

Вы создали вышеупомянутое уведомление класса, используя wsdl.exe? если это так, вы убедились, что он использует опцию /serverInterface, это важно (см. изображение ниже), на salesforce ясно, что вам нужно реализовать класс, который вызывает интерфейс уведомлений если это не обработано должным образом, это выдаст ошибку System.IndexOutOfRangeException

Пожалуйста, попробуйте снова, используя опцию serverinterface. Это должно решить проблему.

0 голосов
/ 07 марта 2019

Я думаю, что вы не можете достичь этого метода, потому что вы пытаетесь передать объект: "уведомления n" и используя запрос GET. Вы не можете сделать GET с этим методом. в любом случае исключение, которое вы описываете, похоже, не связано. это в вашем коде. попробуйте поделиться кодом, который вы используете для использования этой услуги

...