Интеграция Microsoft Dynamics Nav (Navision) с Sharepoint 2010 с использованием BCS

Я пытаюсь интегрировать Microsoft Dynamics Nav 2009 R2 (Navision) с Sharepoint 2010, используя внешние типы контента. Я очень новичок как в Dynamics Nav, так и в Buisness Connectivity Service в Sharepoint 2010 и не могу заставить его работать.

Я знаю, что вы можете публиковать страницы в Dynamics Nav в качестве веб-служб, и я опубликовал одну из демонстрационных страниц в качестве веб-службы и успешно подключился к ней с помощью Visual Studio (добавил ее в качестве веб-ссылки). Я вызвал методы добавления и удаления программно, и все работало нормально.

Я открыл дизайнер sharepoint и попытался добавить внешний тип контента. Я установил "Тип источника данных" на "Служба WCF" и использовал URL-адрес веб-службы (http://devel:7047/DynamicsNAV/WS/Page/Customer) как в "URL-адресе метаданных службы", так и в "URL-адресе конечной точки службы". ". Когда я пытаюсь подключиться к веб-сервису, я получаю сообщение об ошибке "Не удается найти подходящую конфигурацию конечной точки".

Как я уже говорил ранее, я очень плохо знаком с Microsoft Dynamics Nav и внешними типами контента в SharePoint. Трудно найти информацию об интеграции Dynamics Nav и Sharepoint, и я немного растерялся. Буду очень признателен, если кто-нибудь сможет пролить свет на то, как интегрировать Dynamics Nav с SharePoint с помощью BCS.

1 ответ

Вам придется простить меня, поскольку, хотя я кое-что знаю о веб-службах NAV, я почти ничего не знаю о Sharepoint и BCS.

Однако, сказав это, у меня есть несколько советов, которые могут быть полезны: прежде всего, веб-службы NAV построены на WCF и используют BasicHttpBinding. Если вы проведете некоторое исследование о том, как подключить службу WCF BasicHttpBinding к BCS, вы можете получить некоторую тягу там. Нет принципиальной разницы между любой стандартной службой BasicHttpBinding и веб-службой, ориентированной на NAV.

Вы также упомянули, что вам удалось успешно подключиться к веб-службам NAV в Visual Studio с помощью веб-ссылки. Однако веб-прокси-серверы создаются с использованием более старой утилиты "wsdl.exe" и поэтому могут работать только с классическими веб-службами SOAP. Хотя службы BasicHttpBinding полностью обратно совместимы с веб-службами SOAP, все еще существует проблема отсутствия параметров конфигурации, уникальных для любой службы WCF. Вы действительно можете подумать об использовании справочника услуг в visual studio и выяснить, как заставить его корректно работать с опубликованными веб-службами NAV. При этом вы можете использовать сгенерированные параметры конфигурации, чтобы надеяться получить представление о том, чего не хватает в конструкторе sharepoint. Я предполагаю, что отсутствующая ошибка "конфигурации конечной точки" говорит вам, во многих словах, что некоторые специфичные для WCF настройки необходимы в конструкторе sharepoint, прежде чем вы сможете подключиться к веб-службе NAV с помощью прокси WCF. Например, это может быть связано с безопасностью, поскольку WCF обеспечивает гораздо более детальный уровень контроля, чем классический SOAP. Опять же, ключ, который я думаю, - это помнить, что sharepoint нужна правильно настроенная конечная точка WCF, тогда как старые веб-ссылки этого не делают. Вероятно, поэтому вы можете заставить его работать в визуальной студии, а не в дизайнере sharepoint.

Просто чтобы дать вам представление (а не урок "лучших практик"), когда я создаю ссылочный прокси-сервер службы в своих проектах NAV, я часто пытаюсь использовать конфигурацию на основе кода вместо чрезмерно подробной конфигурации на основе файлов (особенно потому, что мы все равно не можем контролировать привязки конечных точек уровня обслуживания NAV). Я использую код, подобный этому, для создания клиентского соединения (конечно, это просто псевдокод, который не будет компилироваться, вам нужно указать, например, фактический клиентский прокси-класс ссылочного сервиса, но это должно дать вам представление какие параметры конфигурации привязки WCF необходимы):

    using System.Security.Principal;
    using System.ServiceModel;

    private void TestNavConnection(string url)
    {
        using (var ws = new NavServiceReference(GetBindingTransportCredentialOnly(), new EndpointAddress(url)))
        {
            ws.ClientCredentials.Windows.AllowNtlm = true;
            ws.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
            var record = ws.Read("XYZ");
        }
    }

    private static BasicHttpBinding GetBindingTransportCredentialOnly()
    {
        var binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
        binding.MaxReceivedMessageSize = 1048576;
        return binding;
    }

Надеюсь это поможет. Удачи!

Другие вопросы по тегам