在VS和C#中完成新手,我正在尝试设置一个非常简单的Web服务。我设法编写了一个类(希望)返回一个项目的名称,给定项目的代码。现在我想实现它,以便可以从Web调用它,但我不知道如何检索参数。我们的想法是http://myurl.com?ProdRef=XYZ,并返回产品XYZ的名称 请不要拍,这是我第一次尝试使用C#和VS!
班级代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
/// <summary>
/// Summary description for Class1
/// </summary>
class Product
{
public string ProdRef {get; set; }
public string ProdName{get; set; }
public static string GetLabel(string ProdRef)
{
//
// create a new SqlConnection object with the appropriate connection string
SqlConnection sqlConn = new SqlConnection("Data Source=ssss;Initial Catalog=ccccc;Persist Security Info=True;User ID=uuu;Password=pppp;Network Library=dbmssocn");
// open the connection
sqlConn.Open();
// create the command object
SqlCommand sqlComm = new SqlCommand("select libelle from dbo.vwArticlesPerm WHERE Ref = '" + ProdRef + "'", sqlConn);
string strResult = (string)sqlComm.ExecuteScalar();
// close the connection
sqlConn.Close();
return strResult;
}
}
网络服务代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://xxxxx.lu/clientwebserv")]
[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 WebService : System.Web.Services.WebService {
public WebService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string GetName(string prName) {
return Product.GetLabel(prName);
}
}
答案 0 :(得分:1)
我认为您应该以这种方式定义GetName
[WebMethod]
public string GetName(string name)
{
return Product.GetLLabel(name);
}
当客户端应用程序加载您的WSDL时,返回的xml显示GetName
函数需要输入中的字符串并返回一个字符串。这就是全部。
下一步:不要手动构建查询字符串,int,日期,使用参数。
SqlCommand sqlComm = new SqlCommand(
"select libelle from dbo.vwArticlesPerm WHERE Ref = @par", sqlConn);
cmd.Parameters.AddWithValue("@par", ProdRef);
如果您想使用GetLabel
,则必须在其声明中添加public
,否则您将无法在其课程外看到它!
public static string GetLabel(string ProdRef)
{
string strResult = null;
using (SqlConnection sqlConn = new SqlConnection("server=xxx;uid=yyy;pwd=zzz;database=myerp;"))
{
sqlConn.Open();
using (SqlCommand sqlComm = new SqlCommand("select libelle from dbo.vwArticlesPerm WHERE Ref = '" + ProdRef + "'", sqlConn))
strResult = (string)sqlComm.ExecuteScalar();
sqlConn.Close();
return strResult;
}
}
我给你的另一个建议是在实例化实现using(...)
接口的类时使用IDisposable
:当从using
块类执行退出时,你可以避免内存浪费和一些头痛:))