用VC++2005调用用ASP.NET(C#)做的WebSerice接口进行操作数据库

 

VC++2005调用用ASP.NETC#)做的WebSerice接口进行操作数据库

作者:木水于(shemney_yang@qq.com)

 

关键字:VS2005  VC++2005  ASP.NETC# WebSerice  数据库  ADO  XML

 

(代码下载:http://download.csdn.net/source/719983  资源名称为VC++2005 WebService)

 

一、        前言

 

最近在做毕业设计时,要对远程数据库进行查询,更新,删除等操作。

因此我利用WebService技术。

WebService技术主要目的是为了夸平台相互通信,不受语言的限制。为了达到这一目标,WebService采用了基于XML(可扩展标记语言)、XSDXMLSchema)等独立于平台、独立于软件供应商的标准。

既然如此,我一开始以为只要WebService提供操作数据库的接口,然后在客户端远程调用这些接口就可以达到我的目的。这想法是对的,说起来简单,但是做起来可不是这么简单了。尤其是我们有用VC MFC的开发人员。

我花了几乎一周的时间来研究这个问题,在网上找的例子很简单,也很零散。但不符合我的要求,只说了调用WebService的一个很简单的接口,没有数据库操作。还有说用gsoapWebService应用的一种),我觉得这个方法比较麻烦。

好了费话少说,下面介绍我的做法,这也是对网上所说的一些技术总结,因为在网上我没有找到一个具体例子,所以写这篇文章,为那些没有用过这种技术的人能够快速掌握这种技术,尽一点微薄之力。

 

二、        开发环境

 

开发平台:VS2005

操作系统:Windows 2003 (提供了方便的IIS管理,如果是使用XP的用户就请安装IIS)

开发语言:C++, C#

 

三、        主要解决思路

 

1、利用VS2005创建一个asp.net(C#)web 服务网站,定义操作数据库的函数(也说是WebService接口)。

2、将创建的网站放到IIS虚拟目录中。

3、利用VC++2005创建一个基于对话框的程序,调用WebSerive接口。

 

四、        创建WebService网站(ASP.NET C#)

 

1、  打开VS2005,新建一个网站。请看下图:

图一

 

如上图,选择模板“ASP.NET WEB服务”,语言“Visual C#”,单击“浏览”更改项目的存放位置,更改项目名称“WS,单击“确定”。

 

2、在解决方案中展开“App_Code”,找到“Service.cs”,双击打开,如下图所示:

图二

 

3为了与VC++ 客户端更好的通信,在这里决定使用ADO(注意不是ADO.NET)操作数据库,所以要添加COM组件。

方法如下:在解决方法中,右击鼠标右键,单击“添加引用”,单击“COM”,找到“Microsoft ActiveX Data Objects Libarary 2.7,选择它,单击确定。如下图所示:

图三

 

4、编写代码:

 

1)、添加引用空间:

         Using ADODB;

 

2)、添加public属性:

public static ADODB.Connection conn = new ADODB.Connection();

public static ADODB.Recordset rs = new ADODB.Recordset();

public string strConn ="Provider=SQLOLEDB;Data Source=你的服务端IP;Persist Security Info=False;Integrated Security=SSPI;User_ID=用户名;Password=用户密码;Initial Catalog=数据库名";

    

3)、设计接口:

[WebMethod]

    public string ExecSQL(string strSQL)

    {

        conn.ConnectionString = strConn;

        //连接数据库

        try

        {

            conn.Open(strConn, "", "", -1);

 

        }

        catch (Exception e)

        {

            conn.Close();

            return (e.ToString());

        }

 

        ADODB.Stream stream = new ADODB.Stream();

        try

        {

rs.Open(strSQL, conn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, (int)ADODB.CommandTypeEnum.adCmdText);

            rs.Save(stream, PersistFormatEnum.adPersistXML); //将查询结果以XML形式保存到Stream对象中

        }

        catch (Exception e1)

        {

            conn.Close();

            return e1.ToString();

        }

        conn.Close();

        return stream.ReadText(stream.Size); //返回XML字符串

}

 

5)、单击“生成网站”,如下图:

图四

 

然后,单击“调试”,再单击“开始执行(不调试)”,我们IE浏览器上右看如下图所示:

图五

 

6)、在浏览器中成功看到WebService网页后,WS添加到IIS的虚拟目录中。接着为WS创建应用程序池。

方法如下:打开“WS属性”,单击“创建”,单击确定。如下图所示:

图六

 

7)IIS中,单击“Service.asmx”,单击鼠标右键,单击“浏览”。在浏览器中成功看网页后,得到见网址:http://localhost/WS/Service.asmx(localhost这是在本地机器测试时用的,如果不是本地机器,将IP替换它)。

                                                                               5、好了服务器的编程就到这,下面介绍VC++2005编写客户端,对于熟悉VC++的人来说,我就不把步骤写得那么详细了。

 

五、创建客户端(VC++2005 MFC 非托管)

 

1、创建一个基于对话框的MFC应用程序,工程名为WebService。为对话框资源添加一个名为“查询”的按钮,并添加鼠标单击事件处理。

 

2、在解决方案资源管理器中右击鼠标,单击“添加Web引用”,如下图所示:

图七

 

如上图,在“URLu)”中写上WebService的网址:http://localhost/WS/Service.asmx,单击“前往”,Web引用名可以随便取,我取“MyWebService”,单击“添加引用”。可以看到解决方案管理器中的变化:

图八

 

技巧说明:如果Web服务器上的WebService有改变时,可以在右击“MyWebService”,单击“更新Web引用”,重新编译。或者删除重新添加WEB引用。

 

3、在类视图中:

图九

如上图,有一类CserviceT<Tclient>,函数ExexSQLBSTR strSQL,BSTR *ExecSQLResult)这是我们需要用到的。注意这里我们可以看得出来,VC++是通过COM组件的方式调用WebService的接口的。

 

4、stdafx.h中添加下面语句:

    #import C:/Program Files/Common Files/System/ado/msado15.dll no_namespace rename(EOF,rsEOF)

    WebServiceDlg.cpp中添加引用文件如下:

               #include "WebService.h"
               using namespace Service;
 
5、编写调用代码,如下:

    void CWebServiceDlg::OnBnClickedButton1()

    {

         // TODO: 在此添加控件通知处理程序代码

         CoInitialize(NULL);

         _StreamPtr pStream;

         pStream.CreateInstance(__uuidof(Stream));

         _RecordsetPtr pRst(_uuidof(Recordset));

         HRESULT hr = S_OK;

         CComBSTR Result;

         CComBSTR sql = "Select Nickname from User1 where User_ID = '000'";

         CService* service = new CService();  // 代理对象

 

         // 可以调用SetUrl动态设置Web服务地址

         // debug->SetUrl("http://blog.eray.cn/debug.asmx");

 

         hr = service->ExecSQL(sql,&Result);

    

         if(FAILED(hr))

         {

             MessageBox(L"调用失败");

         }

         else

         {

 

             CString str;

             _variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);

             pStream->raw_Open(varOptional, adModeUnknown, adOpenStreamUnspecified,NULL,NULL);

             pStream->put_Type(adTypeText);

             pStream->WriteText((_bstr_t)Result,adWriteChar); //将返回的XML字符串,读入Stream对象中

             pStream->Position = 0;

             //打开含有XML序列化信息的Stream,vtMissing是不用我们自己定义的            

             pRst->Open(pStream.GetInterfacePtr(),vtMissing,

                          adOpenForwardOnly,adLockReadOnly,adCmdFile);

                     

             while(!pRst->rsEOF)

              {

                  str = pRst->GetCollect("Nickname");

                  pRst->MoveNext();

             }

             MessageBox(str,L"查询结果");

             pRst->Close();

             pRst.Release();

             pStream->Close();

             pStream.Release();

         }

         delete service;

         CoUninitialize();

    }

 6、好了,该写的代码都已经写完了,编译成功,运行测试,OK成功!
 六、结束语

 

       这是我经过好几天努的成果,在这里班门弄斧了,如果有什么不对的地方,请指正。希望能给读者门一点帮助。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为你提供一个使用ASP.NET Core 6编写的Web Service示例。在这个示例中,我们将创建一个简单的学生管理系统,具有添加学生、获取学生列表和获取特定学生信息的功能。 首先,按照以下步骤创建一个ASP.NET Core 6 Web API项目: 1. 打开Visual Studio 2022并选择“创建新项目”。 2. 在“创建新项目”对话框中,搜索并选择“ASP.NET Core Web API”模板。 3. 输入项目名称和位置,然后点击“下一步”。 4. 在“配置新项目”对话框中,选择.NET 6.0作为目标框架,并点击“创建”。 5. 创建完成后,Visual Studio会为你生成一个包含默认控制器的Web API项目。 现在我们来实现学生管理系统的功能。按照以下步骤进行操作: 1. 首先,我们需要创建一个数据模型来定义学生的结构。在项目中创建一个名为"Models"的文件夹,并在其中添加一个名为"Student.cs"的类文件。在该类文件中定义以下代码: ```csharp public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } ``` 2. 接下来,我们需要创建一个存储学生数据的服务。在项目中创建一个名为"Services"的文件夹,并在其中添加一个名为"StudentService.cs"的类文件。在该类文件中定义以下代码: ```csharp public interface IStudentService { List<Student> GetStudents(); Student GetStudentById(int id); void AddStudent(Student student); } public class StudentService : IStudentService { private List<Student> _students; public StudentService() { _students = new List<Student>(); } public List<Student> GetStudents() { return _students; } public Student GetStudentById(int id) { return _students.FirstOrDefault(s => s.Id == id); } public void AddStudent(Student student) { student.Id = _students.Count + 1; _students.Add(student); } } ``` 3. 现在,我们需要创建一个控制器来处理学生管理的请求。在项目的"Controllers"文件夹中创建一个名为"StudentController.cs"的类文件,并添加以下代码: ```csharp [ApiController] [Route("api/[controller]")] public class StudentController : ControllerBase { private readonly IStudentService _studentService; public StudentController(IStudentService studentService) { _studentService = studentService; } [HttpGet] public ActionResult<List<Student>> GetStudents() { var students = _studentService.GetStudents(); return Ok(students); } [HttpGet("{id}")] public ActionResult<Student> GetStudent(int id) { var student = _studentService.GetStudentById(id); if (student == null) { return NotFound(); } return Ok(student); } [HttpPost] public IActionResult AddStudent(Student student) { _studentService.AddStudent(student); return CreatedAtAction(nameof(GetStudent), new { id = student.Id }, student); } } ``` 4. 最后,我们需要配置依赖注入。打开项目的"Startup.cs"文件,并在"ConfigureServices"方法中添加以下代码: ```csharp services.AddSingleton<IStudentService, StudentService>(); ``` 5. 现在我们可以运行应用程序并使用POSTMAN进行测试。在Visual Studio中按下F5启动应用程序,并确保应用程序成功运行。 现在,我们可以使用POSTMAN来测试学生管理系统的功能。以下是一些测试案例: - 获取学生列表:发送GET请求到"http://localhost:5000/api/student",你应该能够收到一个空的学生列表。 - 添加学生:发送POST请求到"http://localhost:5000/api/student",在请求体中添加JSON数据,例如: ```json { "name": "John Doe", "age": 20 } ``` 发送请求后,你应该能够收到HTTP 201 Created的响应,并返回添加的学生信息。 - 获取特定学生信息:发送GET请求到"http://localhost:5000/api/student/{id}",将"{id}"替换为实际的学生ID,你应该能够收到特定学生的信息。 这就是使用ASP.NET Core 6编写一个具有一定功能和复杂度的Web Service示例的步骤。你可以根据需要进一步扩展和修改代码,添加其他功能和测试案例。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值