需求:作为服务方,需要监控每个调用webservice的客户端。需要监控的信息大致如下:客户端的ip,客户端调用了哪个类的哪个方法。
于是自己花了点时间对asp.net的webservice机制作了一下探索。
解决方案:
在接口项目中编写一个所有webservice接口的基类,在此基类的构造方法中,通过分析HttpContext.Current.Request得到想要的信息。
1.ip可以通过HttpContext.Current.Request.UserHostAddress得到
2.调用发哪个方法以及参数等都可以通过分析HttpContext.Current.Request.InputStream得到
这是我用下面的代码输出的InputStream的内容:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> <MyTestMethod xmlns="http://tempuri.org/"> <msg>abcd</msg> </MyTestMethod></soap:Body></soap:Envelope>
看到了吧?调用的方法是MyTestMethod,参数是msg,值是abcd
以下是测试的过程:
先把结论给出:
asp.net的程序在添加对webservice的引用时,客户端会生成代理proxy类。
客户端的调用代码一般类似这样:
ws.Service1 s = new WSWeb.ws.Service1();
s.HelloWorld();
s.MyTestMethod("sssssssssssssttttt");
1.在ws.Service1 s = new WSWeb.ws.Service1();运行这行时,并不会调用服务器端的构造方法,而是调用本地生成的proxy类的构造方法。
2.只有在运行这行时:s.HelloWorld();才会将方法及参数形成soap,绑定到http,发送到服务器端。此时,先调用服务器端的构造方法,然后调用服务器端的HelloWorld
运行第3行s.MyTestMethod("sssssssssssssttttt");时也是这样,会先调一下服务器端的构造方法,再调用服务器端的MyTestMethod。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, webservice
, request.inputstream
, helloworld
, 方法
, service
, httpcontext
ASP.NET调用WebService
,以便于您获取更多的相关知识。