调用远端接口,向远端接口写入一个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. node.js(express)连接mongoDB入门指导

    一.写在前面 人人都想成为全栈码农,作为一个web前端开发人员,通往全栈的简洁之路,貌似就是node.js了.前段时间学习了node.js,来谈谈新手如何快速的搭建自己的web服务,开启全栈之路. 二 ...

  2. centos安装lamp

    http://bbs.qcloud.com/thread-1316-1-1.html 启动MySQL http://www.cnblogs.com/starof/p/4680083.html 修改密码 ...

  3. easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)

    需求: 实现过程及思路 1.先页面布局 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=" ...

  4. ActiveReports 报表应用教程 (15)---报表换肤

    在葡萄城ActiveReports报表中,可以设置报表中不同控件的样式,然后把这些样式保存到一个外部的XML文件当中,供其他报表使用.如果用户希望同一份报表以不用的外观分发,只需要简单地修改样式表单, ...

  5. Java java jdk在Linux下安装与环境变量的配置

    java jdk在Linux下安装与环境变量的配置 by:授客 QQ:1033553122 linux环境:CentOS-6.0-x86_64-bin-DVD1.iso [root@localhost ...

  6. MVC与单元测试实践之健身网站(一)-项目概述

    前不久刚刚通过租房网站的开发学习了MVC,并随后学习了单元测试相关的基础,现在开始健身网站的开发,该项目将结合MVC与单元测试,在开发实践过程中,趁热打铁,巩固并运用之前的内容. 一 健身网站功能描述 ...

  7. Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...

  8. 最近见到一个用react native实现的标尺动画,不知道如何实现 帖两张图(新知食App)

    很恶心,这款App的标尺没有做兼容,我在模拟上看不到效果,无法说明我想做出的东西的效果,无奈粘一张图吧! 就是这么一个屌样子,如何实现?

  9. webpack学习笔记—优化缓存、合并、懒加载等

    除了前面的webpack基本配置,还可以进一步添加配置,优化合并文件,加快编译速度.下面是生产环境配置文件webpack.production.js,与wenbpack.config.js相比其不需要 ...

  10. Laravel安装教程

    1.Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length() 报这个错是因为Apache/bin目录下 l ...