通过HttpWebRequest调用webService
调用远端接口,向远端接口写入一个xml文件(loginLog为xml的字符串)。关键方法如下:
public object InsertAuditLog(string loginLog)
{ //Wsdlxml(loginLog)返回wsdl的xml
byte[] bs = Encoding.UTF8.GetBytes(Wsdlxml(loginLog));
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://10.109.209.90:21010/gather/services/AioxPort"); myRequest.Method = "POST";
myRequest.ContentType = "text/xml; charset=utf-8";
//mediate为调用方法
myRequest.Headers.Add("SOAPAction", "http://tempuri.org/mediate");
myRequest.ContentLength = bs.Length; //Console.WriteLine("完成准备工作");
using (Stream reqStream = myRequest.GetRequestStream())
{
reqStream.Write(bs, , bs.Length);
} using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
{
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
return sr.ReadToEnd();
//Console.WriteLine("反馈结果" + responseString);
}
//Console.WriteLine("完成调用接口");
}
自己项目中的完整应用代码如下(备忘):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Collections;
using System.Xml;
using System.Net;
using System.IO;
using System.Text; namespace AuditLog
{
public class AuditLogServer
{
/// <summary>
/// 将计件满足条件日志写入4A
/// </summary>
public void WriteAuditLogTo4A()
{
DateTime currTime = DateTime.Now; #region 处理登录日志 string loginLog = "";
DataTable loginLogList = GetLoginLog(currTime);
if (loginLogList != null && loginLogList.Rows.Count > )
{
for (int i = ; i < loginLogList.Rows.Count; i++)
{
DataRow dr = loginLogList.Rows[i];
//生成一条日志
loginLog = Generate4ALogXml(dr,);
try
{
InsertAuditLog(loginLog);
string updateSql = string.Format(@"update CC_LOGIN_HISTORY set tag=1 where ID={0}", Convert.ToInt32(dr["ID"].ToString()));
ExecuteNonQuery(updateSql);//修改已写入4a登录日志
}
catch { } //if (i > 1)
//{
// loginLogList = null;
// break;
//}
}
}
#endregion #region 处理模块操作日志
string moduleLog = "";
DataTable moduleLogList = GetMoudelLog(currTime);
if (moduleLogList != null && moduleLogList.Rows.Count > )
{
for (int i = ; i < moduleLogList.Rows.Count; i++)
{
DataRow dr = moduleLogList.Rows[i];
moduleLog = Generate4ALogXml(dr, );
try
{
InsertAuditLog(moduleLog);
string updateSql = string.Format(@"update CC_OPERATION_LOG set tag=1 where ID={0}", Convert.ToInt32(dr["ID"].ToString()));
ExecuteNonQuery(updateSql);//修改已写入4a登录日志
}
catch { } //if (i > 1)
//{
// moduleLogList = null;
// break;
//}
}
} #endregion
} /// <summary>
/// 向4a插入审计日志
/// </summary>
public object InsertAuditLog(string loginLog)
{ //byte[] bs = Encoding.UTF8.GetBytes(Wsdlxml(loginLog));
byte[] bs = Encoding.UTF8.GetBytes(loginLog);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://10.109.209.90:21010/gather/services/AioxPort"); myRequest.Method = "POST";
myRequest.ContentType = "text/xml; charset=utf-8";
myRequest.Headers.Add("SOAPAction", "http://tempuri.org/mediate");
myRequest.ContentLength = bs.Length; //Console.WriteLine("完成准备工作");
using (Stream reqStream = myRequest.GetRequestStream())
{
reqStream.Write(bs, , bs.Length);
} using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
{
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
var rs = sr.ReadToEnd();
return rs;
//Console.WriteLine("反馈结果" + responseString);
}
//Console.WriteLine("完成调用接口");
} #region 生成审计日志内容 /// <summary>
/// 生成日志内容
/// </summary>
/// <param name="dr">表格的行</param>
/// <param name="opType">操作类型1=登录 2=模块操作</param>
/// <returns></returns>
public string Generate4ALogXml(DataRow dr, int opType)
{
string opTypeName = "";
string moduleName = ""; string clientNetAddr = "";
string clientAddr = ""; if (opType == )//登录
{
opTypeName = "登录";
moduleName = "登录模块";
clientNetAddr = dr["CLIENT_NETWORK_ADDRESS"].ToString();
clientAddr = dr["CLIENT_ADDRESS"].ToString();
}
else if (opType == )//模块操作
{
opTypeName = "模块操作";
moduleName = dr["PERMISSION"].ToString();
clientNetAddr = dr["CLIENT_NETWORK_ADDRESS"].ToString();
clientAddr = dr["CLIENT_ADDRESS"].ToString();
} string xml = "";
string itemXml = string.Format(
@"<LOG4A>
<IDENTITY_NAME>4ABOSSLog</IDENTITY_NAME>
<RESOURCE_KIND>1</RESOURCE_KIND>
<RESOURCE_CODE>SCNGJJXC</RESOURCE_CODE>
<IDR_CREATION_TIME>{0}</IDR_CREATION_TIME>
<MAIN_ACCOUNT_NAME></MAIN_ACCOUNT_NAME>
<SUB_ACCOUNT_NAME>{1}</SUB_ACCOUNT_NAME>
<OPERATE_TIME>{2}</OPERATE_TIME>
<OP_TYPE_ID>1-KZYYT-10001</OP_TYPE_ID>
<OP_TYPE_NAME>{6}</OP_TYPE_NAME>
<OP_LEVEL_ID>1</OP_LEVEL_ID>
<OPERATE_CONTENT>{3}</OPERATE_CONTENT>
<OPERATE_RESULT>0</OPERATE_RESULT>
<MODULE_ID>login</MODULE_ID>
<MODULE_NAME>{7}</MODULE_NAME>
<TASK_CODE></TASK_CODE>
<BANKAPPROVE></BANKAPPROVE>
<BANKFLAG></BANKFLAG>
<CLIENT_NETWORK_ADDRESS>{4}</CLIENT_NETWORK_ADDRESS>
<CLIENT_NAME></CLIENT_NAME>
<CLIENT_ADDRESS>{5}</CLIENT_ADDRESS>
<CLIENT_PORT></CLIENT_PORT>
<CLIENT_MAC></CLIENT_MAC>
<CLIENT_CPU_SERIAL></CLIENT_CPU_SERIAL>
<SERVER_ADDRESS>10.95.240.6</SERVER_ADDRESS>
<SERVER_PORT></SERVER_PORT>
<SERVER_MAC></SERVER_MAC>
<TO_PROVINCES_ID></TO_PROVINCES_ID>
<TO_PROVINCES_NAME></TO_PROVINCES_NAME>
<FROM_PROVINCES_ID></FROM_PROVINCES_ID>
<FROM_PROVINCES_NAME></FROM_PROVINCES_NAME>
</LOG4A>",
DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
dr["SUB_ACCOUNT_NAME"].ToString(),
dr["OPERATE_TIME"].ToString().Replace("/", "-"),
dr["OPERATE_CONTENT"].ToString(),
clientNetAddr,
clientAddr,
opTypeName, moduleName); xml = string.Format(@"<?xml version=""1.0"" encoding=""UTF-8""?><ROOT>{0}</ROOT>", itemXml);
return xml;
} #endregion #region 查询满足审计的日志sql /// <summary>
/// 获取满足条件的登录日志
/// </summary>
/// <returns></returns>
public DataTable GetLoginLog(DateTime currTime)
{
string sql = string.Format(@"SELECT '<![CDATA[登录:用户名='
|| TRIM (B.NAME)
|| ',工号='
|| B.LOGIN_NAME
|| ',登录时间='
|| TO_CHAR (A.LOGIN_TIME, 'YYYY-MM-DD HH24:MI:SS')
|| ',登录系统=计件系统,登录IP='
|| A.LOGIN_HOST
|| ']]>'
OPERATE_CONTENT,A.ID,
A.LOGIN_TIME OPERATE_TIME,
B.LOGIN_NAME SUB_ACCOUNT_NAME,
A.LOGIN_HOST CLIENT_NETWORK_ADDRESS,
A.LOGIN_HOST CLIENT_ADDRESS
FROM CC_LOGIN_HISTORY A, CC_USER B,JJXCNO_FOR_4A C
WHERE A.USER_ID = B.ID
AND A.LOGIN_TIME > TIMESTAMP('2017-6-1 0:00:00')
AND A.TAG IS NULL
AND C.NO_JJXC=B.LOGIN_NAME");
return ExcuteToTable(sql);
}
/// <summary>
/// 获取满足条件的模块操作日志
/// </summary>
/// <returns></returns>
public DataTable GetMoudelLog(DateTime currTime)
{
string sql = string.Format(@"
SELECT A.*, CLIENT_NETWORK_ADDRESS, CLIENT_ADDRESS
FROM (SELECT A.ID,
A.LOGIN_NAME,
A.LOGIN_NAME SUB_ACCOUNT_NAME,
A.PERMISSION,
A.LOG_DATE OPERATE_TIME,
'<![CDATA[模块操作:用户名='
|| TRIM (A.USER_NAME)
|| ',工号='
|| A.LOGIN_NAME
|| ',操作时间='
|| TO_CHAR (A.LOG_DATE, 'YYYY-MM-DD HH24:MI:SS')
|| ',操作系统=计件系统,内容='
|| A.PERMISSION
|| '||'
|| A.DESCRIPTION
|| ']]>'
OPERATE_CONTENT
FROM CC_OPERATION_LOG A, JJXCNO_FOR_4A B
WHERE A.TAG IS NULL
AND A.LOG_DATE > TIMESTAMP ('2017-6-1 0:00:00')
AND B.NO_JJXC = A.LOGIN_NAME) A
LEFT JOIN
(SELECT *
FROM (SELECT BB.*,
ROW_NUMBER ()
OVER (PARTITION BY BB.LOGIN_TIME, BB.LOGIN_NAME)
AS NUM
FROM (SELECT TO_CHAR (LOGIN_TIME, 'YYYY-MM-DD') LOGIN_TIME,
B.LOGIN_NAME,
AA.LOGIN_HOST CLIENT_NETWORK_ADDRESS,
AA.LOGIN_HOST CLIENT_ADDRESS
FROM CC_LOGIN_HISTORY AA, CC_USER B
WHERE AA.USER_ID = B.ID
AND AA.LOGIN_TIME >
TIMESTAMP ('2017-6-1 0:00:00')) BB)
WHERE NUM = 1) B
ON ( TO_CHAR (A.OPERATE_TIME, 'YYYY-MM-DD') = B.LOGIN_TIME
AND A.LOGIN_NAME = B.LOGIN_NAME)");
return ExcuteToTable(sql);
}
#endregion #region 数据库操作
public DataTable ExcuteToTable(string sql)
{
//SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
string sqlConn = "Database=jjxc;UID=jjxc_jk;PWD=bGWN=2R@"; DataSet ds = Db2Helper.Helper_DB2.ExecuteDataset(sqlConn, System.Data.CommandType.Text, sql); return ds.Tables[];
} public int ExecuteNonQuery(string sql)
{
string sqlConn = "Database=jjxc;UID=jjxc_jk;PWD=bGWN=2R@"; return Db2Helper.Helper_DB2.ExecuteNonQuery(sqlConn, System.Data.CommandType.Text, sql);
}
#endregion
}
}
参考网址:
通过HttpWebRequest在后台对WebService进行调用
通过HttpWebRequest调用webService的更多相关文章
- HttpWebRequest调用WebService后台需要Session信息问题的解决办法
今天在用HttpWebRequest调用后台ASP.NET 的WebService方法时遇到了一个问题,后台的WebService方法里使用到了Session对象中的用户信息,而Session对象中的 ...
- [WebService] 使用httpWebrequest 调用并调试WebService
使用httpWebrequest 调用并调试WebService. 首先 使用httpWebrequest 调用WebService 代码: using System.Net; ...
- C# 调用webservice 几种办法(转载)
原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //=========================== ...
- 调用webservice 总结
最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用" ...
- 使用vs2010创建、发布、部署、调用 WebService
原文地址:使用vs2010创建.发布.部署.调用 WebService作者:吴超 一 使用vs2010创建 WebService 1 打开VS2010,菜单 文件->新建->项目2 ...
- winform客户端程序第一次调用webservice方法很慢的解决方法
.net2.0的winform客户端最常用的与服务端通信方式是通过webservice,最近在用dottrace对客户端做性能测试的时候发现,客户端程序启动以后,第一次调用某一个webservice的 ...
- [转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现
本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...
- C#调用webService的几种方法
转自: WebClient 用法小结 http://www.cnblogs.com/hfliyi/archive/2012/08/21/2649892.html http://www.cnblogs. ...
- .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox
一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...
随机推荐
- 4.SSM配置shiro权限管理
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.搭建SSM项目: http://www.cnblogs.com/yysbolg/p/6909021.html ...
- sublime3 常用快捷键
轻量级编辑器,一直用的sublime text3 , 可以根据自己喜好安装喜欢的风格插件,根据工作需求安装代码处理插件. 下一章将推荐我常用的一些风格与代码插件 这里记录一些sublime 常用的快捷 ...
- DOM基础练习代码(二)
上一篇给大家的三段代码不知到大家有没有练习呢?今天再给大家带来两段DOM的练习! 4.封装函数,实现children功能,最好哎原型链上编程 Element.prototype.getChildren ...
- 【代码笔记】iOS-在导航栏中显示等待对话框
一,效果图. 二,代码. ViewController.m #import "ViewController.h" @interface ViewController () @end ...
- AJAX删除事件与加载数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python学习笔记之——unittest框架
unittest是python自带的单元测试框架,尽管其主要是为单元测试服务的,但我们也可以用它来做UI自动化测试和接口的自动化测试. unittest框架为我们编写用例提供了如下的能力 定义用例的能 ...
- Android 2018最新的三方库
文章出处https://blog.csdn.net/qq_32368129/article/details/78749880 1.MaterialStepperView 它是用Material Des ...
- 负载均衡(Load Balancing)学习笔记(一)
概述 在分布式系统中,负载均衡(Load Balancing)是一种将任务分派到多个服务端进程的方法.例如,将一个HTTP请求派发到实际的Web服务器中执行的过程就涉及负载均衡的实现.一个HTTP请求 ...
- SQLServer的TDE加密
TDE的主要作用是防止数据库备份或数据文件被偷了以后,偷数据库备份或文件的人在没有数据加密密钥的情况下是无法恢复或附加数据库的. 首先创建SQL Server中master系统数据库的MASTER K ...
- MySQL应用架构优化-实时数据处理
1.1. 场景 在和开发人员做优化的时候,讨论最多的应该是结合应用场景编写出合适的SQL.并培训开发应该如何编写SQL让MySQL的性能尽量好.但是有一些的场景对于SQL的优化是行不通的. 打个比方, ...