我的项目是编写一个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");
}
}
}
答案 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。