实战演习使Asp.Net Web Service脱离IIS
WSE能够使ASP.Net Web Service寄宿到Console程序,Windows Service,Com+组件和Windows Forms应用程序中,此时,它能够用TCP协议或者其他任何可被接受的传输协议进行网络方法的调用。
下面阐述一下如何创建一个不寄宿在IIS中的Web Service,并给出示例项目的源码。感兴趣的同学可以拿下去测试一下。
示例项目将Windows Service作为网络服务的宿主程序,下面是创建网络服务和宿主程序的过程
- 打开vs2005
- 创建一个Windows服务 [ol]单击文件菜单,选择新工程
- 在新工程的项目模板中,选择Windows服务
- 输入工程名称,如WindowsServiceToHostASMXWebService
- 点击确定
- 项目菜单中,点击添加引用
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services;
namespace WindowsServiceToHostASMXWebService
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloService : System.Web.Services.WebService
{
public HelloService()
{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Addressing;
using Microsoft.Web.Services3.Messaging;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace WindowsServiceToHostASMXWebService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
Uri address = new Uri("soap.tcp://localhost/HelloService");
SoapReceivers.Add(new EndpointReference(address), typeof(HelloService));
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
SoapReceivers.Clear();
}
}
}
这样我用wsdl.exe工具,便可以产生默认的代理类Proxy.cs,操作如下:
- 打开vs2005命令提示行
- 用wsdl.exe生成默认代理文件Proxy.cs
- 这样在d盘就能得到一个Proxy.cs的文件,这就是默认的代理类,下面创建客户端程序
System.Web.Services, and System.Web的引用,将得到的代理类Proxy.cs拷贝到工程中,
下面是最重要的步骤:
在前面的翻译文档中,提到过使用WSE 3.0的网络服务的代理基类必须更改为WebServicesClientProtocol,(可参考WSE 3.0 文档翻译:WSE架构)
因此必须首先将原代理类的基类做如下图所示的修改:
原代理类
新代理类
并且因为网络服务的地址变化,将构造函数做如下修改
原代理类
新代理类:
- 修改Proxy后,将Program.cs中的代码修改如下:
- 测试运行,运行生成的Client.exe,得到如下图所示,表示成功:
示例项目文件: 示例项目文件
有关生成代理类的方法改进
在写这篇文章的时候,没有找到一种比较好的方法,用于生成发布在非IIS中的网络服务的代理类,所以第九步比较麻烦。经朋友提示,我重新查看了下wse3的文档,发现了一个十分简单的办法,wse3提供了一个与wsdl.exe对应的工具:wsewsdl3.exe,使用它可以方便的产生代理类,步骤如下
wsewsdl3.exe在安装目录/Microsoft WSE\v3.0\Tools中,cmd-cd到该目录后,如下图所示操作,即可获取在工具的相同目录获得代理类文件,这个文件可以一点都不做修改,很好用
转载于:https://www.cnblogs.com/jillzhang/archive/2008/01/04/1025744.html
- 实战演习使Asp.Net Web Service脱离IIS
- 实战演习使Asp.Net Web Service脱离IIS
- 实战演习使Asp.Net Web Service脱离IIS
- ASP.NET Web Service应用发布到IIs怎么做
- ASP.NET Web Service应用发布到IIs怎么做
- WSE 3.0 文档翻译:不在IIS中运行ASP.Net Web Service
- asp.net web service应用程序的生成、发布+在本地iis服务器部署,调用
- Owin asp.net 脱离 IIS
- 让ASPX和ASMX脱离IIS运行的例子(ASP.NET宿主程序)
- 在win2003下配置ASP.NET 2.0的IIS并用域名发布
- Windows + IIS 环境部署Asp.Net Core App
- IIs重装后asp.net网站不能运行问题
- aspnet+iis随意修改网页后缀名!
- IIS是如何处理ASP.NET请求的
- ASP.NET对IIS中的虚拟目录进行操作
- win7下配置IIS(ASP.net)
- 在Win7 下IIS(7.5)发布 ASP.NET MVC 4.0 404.8问题
- 微软ASP.NET站点部署指南(5):部署到IIS上作为测试环境
- 集成轻量级的IIS实现打包Asp.Net网站生成exe方便快捷的进行客户演示
- 在IIS7.5中ASP.NET调用cmd程序拒绝访问决绝方法小记