调用远端接口,向远端接口写入一个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进行调用

C# HttpWebRequest 绝技

C#HttpHelper类

通过HttpWebRequest调用webService的更多相关文章

  1. HttpWebRequest调用WebService后台需要Session信息问题的解决办法

    今天在用HttpWebRequest调用后台ASP.NET 的WebService方法时遇到了一个问题,后台的WebService方法里使用到了Session对象中的用户信息,而Session对象中的 ...

  2. [WebService] 使用httpWebrequest 调用并调试WebService

    使用httpWebrequest 调用并调试WebService. 首先  使用httpWebrequest 调用WebService 代码: using System.Net;            ...

  3. C# 调用webservice 几种办法(转载)

    原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //=========================== ...

  4. 调用webservice 总结

    最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用" ...

  5. 使用vs2010创建、发布、部署、调用 WebService

    原文地址:使用vs2010创建.发布.部署.调用 WebService作者:吴超 一 使用vs2010创建 WebService 1 打开VS2010,菜单    文件->新建->项目2 ...

  6. winform客户端程序第一次调用webservice方法很慢的解决方法

    .net2.0的winform客户端最常用的与服务端通信方式是通过webservice,最近在用dottrace对客户端做性能测试的时候发现,客户端程序启动以后,第一次调用某一个webservice的 ...

  7. [转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

    本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...

  8. C#调用webService的几种方法

    转自: WebClient 用法小结 http://www.cnblogs.com/hfliyi/archive/2012/08/21/2649892.html http://www.cnblogs. ...

  9. .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

    一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...

随机推荐

  1. JS--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...

  2. VideoView获取本地视频播放

    主布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  3. 安卓基础之Activity的生命周期

    Activity的生命周期 onCreate 在Activity被创建时调用 onDesdroty 在Activity销毁时调用 onRestart 在Activity重新打开时调用 onStart ...

  4. nodejs设置NODE_ENV环境变量(1)

    看下app.js文件中的一部分代码,如下: //开发环境错误处理 // will print stacktrace if (app.get('env') === 'development') { ap ...

  5. 在Docker Swarm上部署Apache Storm:第2部分

    [编者按]本文来自 Baqend Tech Blog,描述了如何在 Docker Swarm,而不是在虚拟机上部署和调配Apache Storm集群.文章系国内 ITOM 管理平台 OneAPM 编译 ...

  6. Problem1-Project Euler

    Problem1-Project Euler Multiples of 3 and 5   If we list all the natural numbers below 10 that are m ...

  7. 一致性Hash(Consistent Hashing)原理剖析

    引入 在业务开发中,我们常把数据持久化到数据库中.如果需要读取这些数据,除了直接从数据库中读取外,为了减轻数据库的访问压力以及提高访问速度,我们更多地引入缓存来对数据进行存取.读取数据的过程一般为: ...

  8. MemSQL 架构初探

    MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...

  9. windows10如何打开vhd文件

    本人电脑安装了Visual Studio 2017,但是由于项目需求需要Core SDK(2.0)的版本支持,也就是2017最新版.所以现在需要利用visual Studio 2017最新版本的安装包 ...

  10. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...