思路:

  1、需要找一个访问Webservice的统一入口,刚开始进入了一个误区,以为WebService是单独的运行程序,后来经朋友提醒,其实它也是通过http请求在asp.net framework中的处理流程,所以就可以使用HttpModule作为统一入口,进行判断处理。
  2、进入统一入口后,就需要获得访问Webservice的接口方法的名称,然后在网友提供的答案中:Request 的 RequestUri(GET)或 Headers(POST)来得到客户端请求的 WebMethod 名称,并参考一些文章,就实现获得接口方法的名称,就可以连接数据库进行判断处理了。

实现代码:

  自定义一个HttpModule类,实现IHttpModule接口

/// <summary>
/// 验证调用的接口方法是否公开
/// </summary>
public sealed class WebServiceVerifyModule : IHttpModule
{
//销毁不再被HttpModule使用的资源
public void Dispose()
{
} //初始化一个Module,为捕获HttpRequest做准备
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Application_BeginRequest);
} //处理请求的方法
public void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
HttpRequest request = application.Request;
string requestMethod = "";
if (request.UrlReferrer != null && !string.IsNullOrEmpty(request.UrlReferrer.AbsolutePath))
{
//web端调试即出期望结果
requestMethod = request.Url.AbsoluteUri.Split(new char[] { '/' }).Last();
}
else
{
//由winform client 调用 需要用此方法
if (request["HTTP_SOAPACTION"] != null)
{
requestMethod = request["HTTP_SOAPACTION"].Replace("\"", "").Split(new char[] { '/' }).Last(); }
} //连接数据库进行查询判断
if (!string.IsNullOrEmpty(requestMethod))
{
string sql = "select * from OPRT_APIINFO where F_METHOD='" + requestMethod + "'";
DataTable dt = DbHelperOra.Query(sql).Tables[];
if (dt.Rows.Count > )
{
string isOpen = dt.Rows[]["F_ISOPEN"].ToString();
if (isOpen != "")
{
application.CompleteRequest();
application.Context.Response.Write("{{\"result\":\"401\",\"接口方法未被公开!\":\"{1}\"}}");
}
}
}
}
}

  在Web.Config中配置:

<system.web>
<httpModules>
<add name="WebServiceVerifyModule" type="WebServiceDemo.WebServiceVerifyModule"/>
</httpModules>
</system.web>

总结:

  要解决一个问题,首先需要有一个思路,然后要熟悉一些相关的原理知识,这样解决问题时就会游刃有余。

参考文章:

HttpModule的认识

如何:执行使用 SOAP 标头的自定义身份验证

.Net WebService中 如何从Request对象中获取请求的方法和传入参数

Asp.Net WebService 使用后来管理系统对接口方法进行公开控制的更多相关文章

  1. asp.net MVC webservice 报次错解决方法

    asp.net  MVC  webservice  报次错解决方法: 解决方法: 在 RouteConfig.cs public static void RegisterRoutes(RouteCol ...

  2. jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子

    一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...

  3. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码

    将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...

  4. iOS开发笔记 基于wsdl2objc调用asp.net WebService

    1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...

  5. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)

    原文:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇) 老话说的好:好记心不如烂笔头! 本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的 ...

  6. 在asp.net webservice中如何使用session

    原文:在asp.net webservice中如何使用session 原文:刘武|在asp.net webservice中如何使用session 在使用asp.net编写webservice时,默认情 ...

  7. php soap调用asp.net webservice

    原文:php soap调用asp.net webservice 首先做一下准备工作,找到安装环境里的php.ini把;extension=php_soap.dll去掉前面的;.我这里使用的是wamp, ...

  8. 经历:asp.net oracle 部署问题以及解决方法

    原文:[原创]经历:asp.net oracle 部署问题以及解决方法 精简的美丽...... 一.环境    开发环境        win7 64bit         Vs2010       ...

  9. 基于ASP.NET高职学生工作管理系统--文献随笔(八)

    一.基本信息 标题:基于ASP.NET高职学生工作管理系统 时间:2015 出版源:电子科技大学 关键词:高职; 学生管理; ASP.NET; 系统; 二.研究背景 问题定义:随着社会的发展,我国经济 ...

随机推荐

  1. Java的一个高性能快速深拷贝方法。Cloneable?

    本人在设计数据库缓存层的时候,需要对数据进行深拷贝,这样用户操作的数据对象就是不共享的. 这个思路实际上和Erlang类似,就是用数据不共享解决并发问题. 1. 序列化? 原来的做法,是用序列化,我用 ...

  2. Android 数据传递(二)Activity与fragment之间的通信

    在网上找到了一篇总结的非常好的文章,我这里就贴出他的博文地址.自己就不再写这个方面的总结了. Activity与Fragment通信(99%)完美解决方案

  3. jQuery的extend方法的深层拷贝

    一些东西长时间不用就忘了,比如这个jQuery的extend方法的深层拷贝,今天看单页应用的书的时候,看到entend第一个参数是true,都蒙了.也是,自己的大部分对jQuery的学习知识来自锋利的 ...

  4. Bootstrap~大叔封装的弹层

    回到目录 对于Bootstrap的弹层,插件有很多,今天主要用的是它自带的功能,通过bootstrap提供的模式窗口来实现的,而大叔主要对使用方法进行了封装,开发人员可以自己动态传入弹层的HTML内容 ...

  5. 3 分钟轻松搭建 Ruby 项目自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这是一篇关于 Ruby 项目持续集成的快速指导教程,教大家如何使用 f ...

  6. WPF仿Win7便笺

    最近用WPF写了个仿WIN7下面的便笺小工具,还算是比较华丽的,相似度99%以上吧,在集成了便笺原有的功能以外,当然也做了略微的修改,比如加了关于作者版本信息和修改了原有删除便笺的系统弹出框.软件开机 ...

  7. salesforce 零基础开发入门学习(十二)with sharing 、without sharing 、无声明区别

    在salesforce中,声明类大概可以分成三类:分别是可以声明为with sharing,without sharing,以及两者均不声明. public with sharing class A ...

  8. SQL server 临时表

    创建临时表,#代表局部临时表,##代表全局临时表.局部临时表和全局临时表的具体含义是什么呢? 举例说明一下比较清晰些,先来看下局部临时表,[新建查询],在里面输入如下文本: 运行后,我们在此文件执行输 ...

  9. sys.dm_db_wait_stats

    sys.dm_db_wait_stats 返回在操作期间执行的线程所遇到的所有等待的相关信息. 可以使用此聚合视图来诊断 Azure SQL Database 以及特定查询和批处理的性能问题. 执行查 ...

  10. C#对称加密(AES加密)每次生成的密文结果不同思路代码分享

    思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量. 代码 public static string Encrypt(string plainTe ...