如何在ASP.NET中实现Web服务

时间:2010-07-08 14:19:54

标签: asp.net web-services

我是一个相当新的程序员,对Web编程很新,我需要一些ASP.NET补救。我正在尝试在表单中实现自动完成控件。当我将搜索逻辑放在代码隐藏的形式中时,一切正常。但是,一旦我将搜索逻辑移动到Web服务(自动完成仍然在表单代码中调用相同的方法),一切都变得棘手。我正在使用OleDb连接并尝试在我的工作站上访问测试数据库,但是我收到一条错误消息,指出服务器无法访问。

显然,我可以坚持使用aspx代码隐藏,但无论我需要了解Web服务的基本工作方式。有人可以帮我理解我在哪里犯错误吗?

我看起来像这样:

Form.aspx.cs

 ...
 [System.Web.Services.WebMethod]
 [System.Web.Script.Services.ScriptMethod]
 public static string[] GetContacts(string prefixText, int count)
 {
     AutoCompleteService autoCompleteService = new AutoCompleteService();
     autoCompleteService.QueryString = "SELECT ...";
     autoCompleteService.ConnectionString = UserContext.ConnectionString;
     return autoCompleteService.GetResults(prefixText, count);
 }
 ...

AutoComplete.Service.asmx

<%@ WebService Language="C#" CodeBehind="AutoComplete.Service.cs" Class="AutoCompleteService" %>

AutoComplete.Service.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Data.OleDb;
using System.Data;

[WebService(Namespace = "http://tempuri.org/")]
[System.Web.Script.Services.ScriptService]
public class AutoCompleteService : System.Web.Services.WebService {

    public string QueryString;
    public string ConnectionString;

    public AutoCompleteService()
    {
        QueryString = "";
        ConnectionString = "";
    }

    [WebMethod]
    public String[] GetResults(string prefixText, int count)
    {
        ...
    }

    private String[] GetNameListFromDB()
    {
       List<string> resultList = new List<string>();
       OleDbConnection connection = new OleDbConnection(ConnectionString);
       connection.Open();  //Exception thrown here.
       ...
    }

异常

ServerVersion = 'connection.ServerVersion' threw an exception of type 'System.InvalidOperationException'

1 个答案:

答案 0 :(得分:1)

您调用CodeBehind,并且只是实例化该类。它不使用该服务。

使用您的客户端JavaScript库,您可以直接调用该服务。 没有codeBehind中的代码。但这取决于你的客户端js库。

我推荐你的是,获取lern MVC或asp.net MVC,因为他们有更简单的东西,最后更容易实现。