0

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

下面是 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);
                        }

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

我已经在一个简单的“类”库中尝试了代码,它就像一个魅力!有什么我做错了吗?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.
4

1 回答 1

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/

于 2012-04-25T10:27:12.137 回答