CRM 2011 - 插件 - 尝试在插件中执行HTTP发布时的操作超时错误

时间:2012-04-23 16:53:47

标签: plugins http-post dynamics-crm-2011 crm

当我尝试在我的插件中执行HTTP Post时(在PostUpdate中),我遇到了问题。我得到了“操作已经超时” - 错误......

下面是C#代码:

                        //PUBLISH TO ROBAROV
                        WebRequest webRequest = WebRequest.Create(newUri);
                        webRequest.Timeout = 2000;
                        webRequest.ContentType = "application/x-www-form-urlencoded";
                        webRequest.Method = "POST";
                        byte[] bytes = Encoding.ASCII.GetBytes(parameters);
                        Stream os = null;
                        try
                        {
                            webRequest.ContentLength = bytes.Length;
                            os = webRequest.GetRequestStream();
                            os.Write(bytes, 0, bytes.Length);
                        }
                        catch (WebException ex)
                        {
                            throw new Exception(ex.Message);
                        }
                        finally
                        {
                            if (os != null)
                            {
                                os.Close();
                            }
                        }                                

                        //ERROR HAPPENS HERE

                        string responseText = "";
                        try
                        { // get the response
                            WebResponse webResponse = webRequest.GetResponse();
                            StreamReader sr = new StreamReader(webResponse.GetResponseStream());
                            responseText = sr.ReadToEnd().Trim();
                        }
                        catch (WebException ex)
                        {
                            throw new Exception("Error with response : " + ex.Message);
                        }

当我尝试获取响应时发生错误=&gt; webRequest.GetResponse(); <!/ P>

我已经在一个简单的“类”库中尝试了代码,它就像一个魅力!有什么我做错了吗? HTTP Post是指不在同一个域中的网页....

更新: 当我使用webclient执行以下操作时也会发生同样的情况......它可以在正常的“控制台”中运行 - 应用程序:

    private string HttpPostTest(string URL)
    {
        WebClient webClient = new WebClient();

        System.Collections.Specialized.NameValueCollection formData = new System.Collections.Specialized.NameValueCollection();
        formData["state"] = "yes";
        byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
        string Result = Encoding.UTF8.GetString(responseBytes);
        return Result;
    }

我在“事件查看器”中收到以下错误:

Inner Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Crm.Setup.DiffBuilder, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

1 个答案:

答案 0 :(得分:1)

看起来它无法找到CRM程序集:Microsoft.Crm.Setup.DiffBuilder.dll,这是你明确调用方法的东西吗?如果是这样,我会检查程序集是否已注册插件(下面的一些说明)。如果没有,那么从汇总6中存在与该库相关的一些错误,您使用哪个卷起来?如果您不使用,可以考虑汇总7。

您的插件是在数据库中还是在磁盘上注册?

如果在磁盘上注册,则需要在CRM安装文件夹下的/ server / bin / assembly目录中进行外部程序集。

如果它已在数据库中注册并且您包含自定义外部程序集(错误表明无法加载程序集,因此这听起来可能),那么在将数据库注册到数据库之前,您必须ILMerge程序集。这可以解释为什么它适用于本地控制台应用程序,而不是作为插件运行时。

如果是这种情况,那么你可以按照下面的脚本来ILMerge并注册你的'组合'汇编: -

http://www.2wconsulting.com/2010/11/using-ilmerge-with-crm-plugin-assemblies/