Web服务和表单翻译

时间:2013-12-02 20:34:39

标签: c# asp.net web-services visual-studio webforms

我的项目是编写一个Web服务和一个使用它的Web表单。它应该有两个文本框和一个按钮。用户在第一个文本框中输入文本说首字母缩略词并按下按钮。 Web服务将textbox1条目与字典文件进行比较,并在第二个文本框中显示生成的完整单词。这是我到目前为止的代码,我真的很努力让它工作,任何帮助将不胜感激。此时我有'类型或命名空间定义,或期望文件结束'错误。这是我的两个文件。

Default.aspx.cs:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    private Dictionary<string, string> _dictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
    protected void Page_Load(object sender, EventArgs e)
    {
        using (var reader = new StreamReader(File.OpenRead(@"C:/dictionary.csv")))
        {
            while (!reader.EndOfStream)
            {
                string[] tokens = reader.ReadLine().Split(';');
                _dictionary[tokens[0]] = tokens[1];
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        localhost.Service obj = new localhost.Service();
        TextBox1.Text = (obj.Translate());
    }
}

Service.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 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 Service : System.Web.Services.WebService
{
    public Service () {

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

    [WebMethod]
    public string Translate(string input)
{
    string output;
    if(_dictionary.TryGetValue(input, out output))
        return output;

    // Obviously you might not want to throw an exception in this basis example,
    // you might just go return "ERROR".  Up to you, but those requirements are
    // beyond the scope of the question! :)
    throw new Exception("Sinatra doesn't know this ditty");
}
    }

}

1 个答案:

答案 0 :(得分:0)

不确定问题是否仍未得到答复。但这是我的建议。

在Web服务文件中,即说Service1.cs,您没有声明_dictionary对象。因此,您将在服务的构造函数中移动字典对象声明和初始化。

以下是这样的事情。

 public WebService1()
    {
        using (var reader = new StreamReader(File.OpenRead(@"C:/dictionary.csv")))
        {
            while (!reader.EndOfStream)
            {
                string[] tokens = reader.ReadLine().Split(',');
                _dictionary[tokens[0]] = tokens[1];
            }
        }
    }

同样在split方法中,我假设您想使用逗号而不是分号(在您的示例中使用)。

然后在服务的消费中,你会做下面这样的事情。我不确定你在样本中使用localhost对象尝试做什么。

 ServiceReference1.WebService1SoapClient obj = new WebService1SoapClient();
        TextBox2.Text =  obj.Translate(TextBox1.Text);

希望这有帮助。

-Davood。