Обернутый API FatSecret C # возвращает нулевой ответ в WPF - PullRequest
2 голосов
/ 22 мая 2011

У меня есть интересная проблема с FatSecret C # api .Он отлично работает в консольном приложении C #, но не будет работать в приложении WPF или C # Forms.Ответ от сервера всегда нулевой.Я трижды проверил ключи безопасности, скомпилировал их для разных версий .Net framework, и ничего не помогло.

Кто-нибудь сталкивался с подобными проблемами?

Мое альтернативное решение было бы сделатьDLL из консольного приложения (поскольку мне нужно всего несколько функций из API), и ссылка на нее из моего проекта WPF, но я не совсем уверен, что мне следует сделать, чтобы это работало.

Здесьпример кода в формах C #, сделанный только для этого.

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string consumerKey = "hidden";
                string consumerSecret = "hidden";

                FoodSearch fs = new FoodSearch(consumerKey, consumerSecret);

                var response = fs.GetResponseSynchronously(new FoodSearchRequest()
                {
                    SearchExpression = this.textBox1.Text
                });

                if (response.HasResults)
                {
                    foreach (var food in response.foods.food)
                    {
                        string name = food.food_name;

                        listBox1.Items.Add(name);
                    }

                }
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }

        }
    }
}

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 28 августа 2012

Использование FatSecretSharp в приложении WinForm / WPF Вы должны поместить запрос в BackgroundWorker метод DoWork(object sender, DoWorkEventArgs e)

например:.

  1. Создайте новое приложение winform / wpf и добавьте FatSecretSharp.Services к ссылкам
  2. Добавьте кнопку с прослушивателем щелчков и BackgroundWorker с прослушивателем DoWork() к форме
  3. Инкапсулирует метод FoodSearchExample() из "FatSecretSharp.Examples.ConsoleApp" в DoWork(object sender, DoWorkEventArgs e) слушатель компонента backgroundworker:

.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{
        var searchTerm = "apple";

        if (foodSearch == null) {
            foodSearch = new FoodSearch(consumerKey, consumerSecret);
        }

        var response = foodSearch.GetResponseSynchronously(new FoodSearchRequest()
        {
            SearchExpression = searchTerm
        });

        if (response.HasResults) {
            Debug.WriteLine("Got " + response.foods.food.Count + " Results: \n\n");
            var form = "id: {0}, \n - type: {1}, \n - name: {2}, \n - description: {3}";
            foreach (var food in response.foods.food) {
                Debug.WriteLine(String.Format(form, food.food_id, food.food_type, food.food_name, food.food_description));
            }
        } else {
            Debug.WriteLine("No results from term: " + searchTerm);
        }
}

PS: я изменил Console.WriteLine на Debug.WriteLine

0 голосов
/ 26 августа 2013

Я столкнулся с той же проблемой с API FatSecret. Для этого я просто добавляю FatsecretSharp.win dll, который доступен на "platform.fatsecret.com", и просто создаю веб-сервис, используя тот же код, который написан в консольном приложении. Создав то же самое, я решил свою проблему.

ниже приведен код, который написан в веб-сервисе. это используется для поиска продуктов питания. вам просто нужно добавить fatsecretsharp.win.dll, который вы получите из примера кода Fatsecretapis на веб-сайте.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using FatSecretSharp.Services;
using FatSecretSharp.Services.Requests;
using System.Web.Script.Services;
using System.Web.Script.Serialization;

namespace WebService1
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        private static string consumerKey = string.Empty;
        private static string consumerSecret = string.Empty;

        private static FoodSearch foodSearch;


        public Service1()
        {

            //Uncomment the following line if using designed components 
            //InitializeComponent(); 
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string SearchFood(string searchExpression)
        {
            try
            {
                consumerKey = "your consumer Key";

                consumerSecret = "your consumer Secret ";

                var searchTerm = searchExpression;

                foodSearch = new FoodSearch(consumerKey, consumerSecret);

                var response = foodSearch.GetResponseSynchronously(new FoodSearchRequest()
                                    {
                                        SearchExpression = searchTerm,

                                        MaxResults = 50,
                                        PageNumber = 0
                                    });



                if (response != null && response.HasResults)
                {

                    return new JavaScriptSerializer().Serialize(response);
                }
                else
                {

                    return null;
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }


        }

           }
}
0 голосов
/ 22 мая 2011

Есть ли генерируемый app.config? Это должно быть на уровне exe вашего приложения.

...