Вызов мыльного веб-сервиса из плагина Microsoft CRM - PullRequest
1 голос
/ 26 марта 2012

У меня есть плагин, который вызывает веб-сервис на основе мыла при создании нового контакта. Это простой веб-сервис на основе мыла, который отображает приветственное сообщение при вызове

Ниже приведен файл app.config, содержащий все требования к конфигурации.

<?xml version="1.0"?>
        <configuration>
            <system.serviceModel>
                <bindings>
                    <basicHttpBinding>
                        <binding name="WelcomeBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
                            <message clientCredentialType="UserName" algorithmSuite="Default"/>
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://revesinc.com/WelcomeSeamService/Welcome" binding="basicHttpBinding" bindingConfiguration="WelcomeBinding" contract="ServiceReference1.Welcome" name="WelcomePort"/>
            </client>
        </system.serviceModel>
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

и ниже - код плагина C #

BasicHttpBinding myBinding = new BasicHttpBinding();    
myBinding.Name = "WelcomeBinding";
myBinding.Security.Mode = BasicHttpSecurityMode.None;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;                       
myBinding.Security.Message.ClientCredentialType =                   BasicHttpMessageCredentialType.UserName;
                    EndpointAddress endPointAddress = new EndpointAddress("http://revesinc.com/WelcomeSeamService/Welcome");
WelcomeClient client = new WelcomeClient(myBinding,endPointAddress);

когда я создаю контакт в CRM, на моем сервере ничего не отображается. на стороне CRM также нет исключений. Любая идея??? спасибо

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Сначала я хочу спросить вас, как вы собираетесь отображать что-то на вашем сервере?Я не вижу способа сделать это с помощью плагина, но, возможно, я не прав.В любом случае, пожалуйста, покажите часть кода, где вы что-то отображаете.
Вы говорите, что ничего не происходит.Сначала вы должны убедиться, что плагин зарегистрирован правильно.Как я понял, вы должны проверить, что был добавлен шаг с сущностью Contact и Message Create.Также обычно плагины создаются с использованием некоторых шаблонов.Может быть какая-то ошибка в части вашего кода перед вызовом Web-сервиса.
И еще одна проблема, которую я хочу подчеркнуть.У вас есть файл конфигурации с конфигурациями вашей сборки.Я думаю, что для сборок плагинов лучше не хранить никаких конфигураций в конфигурационных файлах, а делать все настройки в коде.
Существует несколько различных способов проверить, что плагин был запущен.Сначала вы можете развернуть не только dll, но и pdb файлы и присоединить их к процессу IIS с помощью отладчика.Если Visual Studio не установлена, вы можете использовать Remote Debugger.Если это невозможно по какой-либо причине, вы можете добавить PluginExecutionException в начало вашего кода, чтобы убедиться, что плагин действительно вызывается.И когда вы будете уверены, что плагин работает, вы можете начать тестовую работу с веб-сервисом.

0 голосов
/ 29 марта 2012

Я предполагаю, что вы вызываете какой-то метод, который показывает приветственное сообщение после этой строки:

 WelcomeClient client = new WelcomeClient(myBinding,endPointAddress);

Я бы предложил использовать службу трассировки для входа в свой плагин.Поместите свой код плагина в try catch и выбросите InvalidPluginExecutionException после трассировки.

Ваш код может выглядеть примерно так в плагине. Метод Execute:

try {

                    ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

                    BasicHttpBinding myBinding = new BasicHttpBinding();
                    myBinding.Name = "WelcomeBinding";
                    myBinding.Security.Mode = BasicHttpSecurityMode.None;
                    myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
                    myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
                    EndpointAddress endPointAddress = new EndpointAddress("http://revesinc.com/WelcomeSeamService/Welcome");
                    WelcomeClient client = new WelcomeClient(myBinding, endPointAddress);
                    client.ShowWelcomeMessage(); // Assuming this is your service method 
                    tracingService.Trace("All went well. service called.");
                    throw new InvalidPluginExecutionException("All went well. Exception just to show the traces on the form");

                }
                catch (Exception ex)
                {
                    tracingService.Trace("Error calling welcome service " + ex.Message);
                    throw new InvalidPluginExecutionException(ex.Message);
                }

ЕслиВаш плагин зарегистрирован правильно, вы сможете увидеть исключение для действий пользователя (создание, обновление и т. д.).По следам вы узнаете, успешно ли вызвана служба или нет.

...