从Microsoft CRM插件调用soap Web服务

时间:2012-03-26 17:44:07

标签: web-services plugins soap dynamics-crm

我有一个插件,可以在创建新联系人时调用基于肥皂的Web服务。它是一个简单的肥皂网服务,在调用时显示欢迎消息

下面是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 个答案:

答案 0 :(得分:1)

首先,我想问你如何在服务器上显示内容?我没有看到任何使用插件的方法,但可能是我不对。在任何情况下,请显示您正在展示某些内容的部分代码 你说没有任何事情发生。首先,您应该检查插件是否已正确注册。据我所知,您应该检查是否添加了实体联系人和消息创建步骤。通常也会使用一些模板创建插件。在调用Web Service之前,代码中可能存在一些错误 还有一个我想强调的问题。您有一个配置文件,其中包含程序集的配置。我认为对于插件程序集最好不要在配置文件中存储任何配置,而是在代码中进行所有设置 几种不同的方法可以检查插件是否被触发。首先,您不仅可以部署dll,还可以部署pdb文件,并使用调试器附加到IIS进程。如果未安装Visual Studio,则可以使用Remote Debugger。如果由于某种原因不可能,你可以在代码的开头抛出PluginExecutionException,以确保真正调用插件。当您确定插件正常工作时,您可以开始使用Web Service进行测试。

答案 1 :(得分:0)

我假设您正在调用一些方法,在此行之后显示欢迎消息:

 WelcomeClient client = new WelcomeClient(myBinding,endPointAddress);

我建议您使用跟踪服务来登录您的插件。将您的插件代码放在try catch中,并在跟踪后抛出InvalidPluginExecutionException。

您的代码可能在插件执行方法中看起来像这样:

试                     {

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

如果您的插件已正确注册,您将能够看到用户操作的异常(创建,更新等)。如果服务成功与否,您将从跟踪中了解到。