日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#开发XML WebService接口(SOAP)

發布時間:2024/10/8 C# 107 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#开发XML WebService接口(SOAP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? using?System;
using?System.Collections;
using?System.ComponentModel;
using?System.Data;
using?System.Diagnostics;
using?System.Web;
using?System.Web.Services;
using?BX.Interface;

namespace?WebService
{
???
/**////?<summary>
????
///?Service1?的摘要說明。
????
///?</summary>?

????public?class?doService?:?System.Web.Services.WebService
????
{

/**////?<summary>
????????
///?網上報銷系統WebService服務通用調用方法
????????
///?</summary>
????????
///?<param?name="ifCode">接口標識</param>
????????
///?<param?name="ifPass">校驗碼</param>
????????
///?<param?name="ifEvent">操作方式(可空)</param>
????????
///?<param?name="ifInfo">傳入的XML信息</param>
????????
///?<returns></returns>?

????????[WebMethod]
????????
public?string?IfService(string?ifCode,string?ifPass,string?ifEvent,string?ifInfo)
????????
{
????????????ifCode?
=?ifCode.Trim();
????????????ifPass?
=?ifPass.Trim();
????????????ifEvent?
=?ifEvent.Trim();
????????????ifInfo?
=?ifInfo.Trim();

????????????
string?IReceiveContract_Id?=?System.Configuration.ConfigurationSettings.AppSettings["IReceiveContract_Id"].Trim();
????????????
string?IReceiveContract_PSW?=?System.Configuration.ConfigurationSettings.AppSettings["IReceiveContract_PSW"].Trim();
????????????
string?IReceiveNoContract_Id?=?System.Configuration.ConfigurationSettings.AppSettings["IReceiveNoContract_Id"].Trim();
????????????
string?IReceiveNoContract_PSW?=?System.Configuration.ConfigurationSettings.AppSettings["IReceiveNoContract_PSW"].Trim();

????????????
if(ifCode.Equals(IReceiveContract_Id))
????????????
{
????????????????
if(!ifPass.Equals(IReceiveContract_PSW))
????????????????????
return?ICommon.createResultXML(2,"","");
????????????????
return?IApplyContract.ReceiveApply(ifCode,ifInfo);
????????????}

????????????
else?if(ifCode.Equals(IReceiveNoContract_Id))
????????????
{
????????????????
if(!ifPass.Equals(IReceiveNoContract_PSW))
????????????????????
return?ICommon.createResultXML(2,"","");
????????????????
return?IApplyNoContract.ReceiveApply(ifCode,ifInfo);
????????????}

????????????
else
????????????
{????????????
????????????????
return?ICommon.createResultXML(1,"","");????????????????????
????????????}
????????
????????}
?//--?end?IfSerive
????}

}

?

通用處理類ICommon.cs
//?****************************************************
//????功????能:SOAP?XML?WebService接口通用處理類
//????說????明:
//????創?建?者:dingzh@jstrd.com
//????創建時間:2007-07-04
//????修改信息:
//?****************************************************
using?System;
using?System.Xml;
using?System.Web.Services.Description;
using?System.CodeDom;
using?System.CodeDom.Compiler;
using?System.Data;

namespace?BX.Interface
{
????
/**////?<summary>
????
///?SOAP?XML?WebService接口通用處理類
????
///?</summary>?

????public?class?ICommon
????
{
????????
public?ICommon()
????????
{
????????????
//
????????????
//?TODO:?在此處添加構造函數邏輯
????????????
//
????????}
????????
????????????
????????
/**////?<summary>
????????
///?動態引用一個XML?Web?Service????????
????????
///?IfSerive(string?ifCode,string?ifPass,string?ifEvent,string?ifInfo)
????????
///?</summary>
????????
///?<param?name="v_WSDL">WSDL路徑</param>
????????
///?<param?name="SvClsName">接口服務真實類名</param>
????????
///?<param?name="v_WebMethod">接口函數方法名</param>
????????
///?<param?name="v_ifCode">接口標識</param>
????????
///?<param?name="v_args">接口函數參數列表數組</param>
????????
///?<returns>string</returns>?

????????public?static?string?getSoapService(string?v_WSDL,?string?SvClsName,?string?v_WebMethod,?string?v_ifCode,ref?object[]?v_args)//不需安裝SOAP?ToolKit?3.0?!???
????????{???
????????????
string?v_NameSpace?=?"DSv_"+v_ifCode;
????????????
string?v_ClassName?=?v_NameSpace?+?"."?+?SvClsName;

????????????
//1)用XML閱讀器從一個文件路徑或者是網絡路徑中讀入WSDL文件:???
????????????XmlTextReader?reader?=?new?XmlTextReader(v_WSDL);//加入?using?System.Xml;???
????????????
//2〉把讀到的內容用ServiceDescription來描述:???
????????????ServiceDescription?sd?=?ServiceDescription.Read(reader);???//加入using?System.Web.Services.Description;???
????????????
//3)用服務導入器把得到的描述導入服務描述中:???
????????????ServiceDescriptionImporter?sdi?=?new?ServiceDescriptionImporter();???
????????????sdi.AddServiceDescription(sd,
null,null);???
????????????
//4)指定要動態編譯的代碼的命名空間:???
????????????CodeNamespace?cn?=?new?CodeNamespace(v_NameSpace);???//"DynamicServices"
????????????
//5)指定要動態編譯的代碼單元:???
????????????CodeCompileUnit?ccu?=?new?CodeCompileUnit();???
????????????
//6)把命名空間添加到動態編譯的代碼單元的命名空間組中去:???
????????????ccu.Namespaces.Add(cn);???
????????????
//7)指示服務導入器把該動態編譯單元內該命名空間的代碼導進去,作為新的動態服務描述:???
????????????sdi.Import(cn,ccu);???
????????????
//8)新建一個C#編譯器來編譯:???
????????????ICodeCompiler?icc?=?new?Microsoft.CSharp.CSharpCodeProvider().CreateCompiler();??
????????????
//9)新建一個編譯參數對象(在這里我們設置它為空的編譯參數):???
????????????CompilerParameters?cp=new?CompilerParameters();????
????????????
//10)指示C#編譯器,按照?CP?編譯參數對象提供的參數來進行?CCU?單元的編譯。并把編譯結果傳給?編譯結果對象?cr:???
????????????CompilerResults?cr?=?icc.CompileAssemblyFromDom(cp,?ccu);???
????????????
//11)從動態編譯結果中獲取?某個?字符串(通常是該類型名字)所表示的真實類:???
????????????Type?t?=?cr.CompiledAssembly.GetType(v_ClassName);???//其中的DynamicServices必須和CodeNamespace?cn?=?new???CodeNamespace("DynamicServices");定義的同名??
????????????
//12)創建該類的實例:???
????????????Object?obj?=?Activator.CreateInstance(t);???????????
????????????
//13)根據方法名稱字符串?反射到該方法的實體:???
????????????System.Reflection.MethodInfo?mi?=?obj.GetType().GetMethod(v_WebMethod);??????????????
????????????
//14)用該方法實體的.Invoke()來調用該方法:???
????????????string?ret?=?System.Convert.ToString(mi.Invoke(obj,?v_args));??//,new?object[]{"傳給方法的參數1","傳給方法的參數2"}));????
????????????return?ret;
????????????
????????????
//????????????添加Web?引用,在WSDL一欄中把剛才得到的WSDL地址復制過來,Web?引用的名稱輸入JavaService
????????????
//????????????JavaService.ServiceService?bean?=?new?JavaService.ServiceService();
????????????
//????????????string?aa?=?bean.IfService("ifUser","ifPass","ifCode","ifEvent","info");
????????}
??//--?End?getSoapService/



????????
/**////?<summary>
????????
///?創建返回結果XML
????????
///?</summary>
????????
///?<param?name="v_ifResult">接口結果代碼</param>
????????
///?<param?name="v_ifStack">錯誤信息堆棧</param>
????????
///?<param?name="v_ifResultInfo">接口結果信息</param>
????????
///?<returns>string</returns>?????????

????????public?static?string?createResultXML(int?v_ifResult,string?v_ifErrStack,string?v_ifResultInfo)
????????
{
????????????
string?v_ifError?=?"";
????????????
switch(v_ifResult)
????????????
{
????????????????
case?1:
????????????????????v_ifError?
=?"無此接口標識ifCode";
????????????????????
break;
????????????????
case?2:
????????????????????v_ifError?
=?"調用系統校驗未通過";
????????????????????
break;
????????????????
case?3:
????????????????????v_ifError?
=?"傳入的不是一個正確的xml格式";
????????????????????
break;
????????????????
case?4:
????????????????????v_ifError?
=?"info參數中的字段不符合規約中的要求";
????????????????????
break;
????????????????
case?5:
????????????????????v_ifError?
=?"該條數據已重復發送";
????????????????????
break;
????????????????
case?9:
????????????????????v_ifError?
=?"本系統處理時發生異常";
????????????????????
break;
????????????????
default:
????????????????????
break;
????????????}


????????????XmlDocument?xmldoc;
????????????
//XmlNode?xmlnode;
????????????XmlElement?xmlelem;

????????????xmldoc?
=?new?XmlDocument();
????????????
//加入XML的聲明段落,<?xml?version="1.0"?encoding="gb2312"?>
????????????XmlDeclaration?xmldecl;
????????????xmldecl?
=?xmldoc.CreateXmlDeclaration("1.0","gb2312",null);
????????????xmldoc.AppendChild?(xmldecl);

????????????
//加入一個根元素
????????????xmlelem?=?xmldoc.CreateElement?("","IfResponse","");
????????????xmldoc.AppendChild?(xmlelem)?;
????????????
//加入另外一個元素
????????????
//for(int?i=1;i<3;i++)
????????????
//{

????????????XmlNode?root?
=?xmldoc.SelectSingleNode("IfResponse");//查找<IfResponse>?

????????????XmlElement?eIfResult?
=?xmldoc.CreateElement("IfResult");//創建一個<IfResult>節點?????????????????
????????????eIfResult.SetAttribute("Note","接口結果代碼");?//設置該節點Note屬性?
????????????eIfResult.InnerText?=?v_ifResult.ToString();?//設置節點文本值
????????????root.AppendChild(eIfResult);??//添加到<IfResponse>節點中?

????????????XmlElement?eIfError?
=?xmldoc.CreateElement("IfError");????????
????????????eIfError.SetAttribute(
"Note","錯誤信息");?
????????????eIfError.InnerText?
=?v_ifError;
????????????root.AppendChild(eIfError);??

????????????XmlElement?eIfErrorStack?
=?xmldoc.CreateElement("IfErrorStack");????????????
????????????eIfErrorStack.SetAttribute(
"Note","錯誤信息堆棧");
????????????eIfErrorStack.InnerText?
=?v_ifErrStack;
????????????root.AppendChild(eIfErrorStack);

????????????XmlElement?eIfResultInfo?
=?xmldoc.CreateElement("IfResultInfo");????????????????
????????????eIfResultInfo.SetAttribute(
"Note","接口結果信息");
????????????eIfResultInfo.InnerText?
=?v_ifResultInfo;
????????????root.AppendChild(eIfResultInfo);
????????????
//}
????????????
//保存創建好的XML文檔
????????????
//xmldoc.Save?(?Server.MapPath("data.xml")?)?;?

????????????
return?xmldoc.InnerXml;
????????????
//xmldoc.OuterXml;

//????????<?xml?version="1.0"?encoding="GB2312"?>
//????????<IfResponse>
//????????<IfResult>接口結果代碼</IfResult>
//????????<IfError>錯誤信息</IfError>
//????????<IfErrorStack>錯誤信息堆棧</IfErrorStack>
//????????<IfResultInfo>接口結果信息</IfResultInfo>
//????????</IfResponse>
//
//????????<IfResult/>依照下述約定:
//????????成功:0?—僅表示接口調用成功,并不代表業務調用成功,業務返回結果信息存放于<IfResultInfo/>節點中
//????????失敗:非零整數值????
//????????????1:無此接口標識ifCode
//????????????2:調用系統校驗未通過????
//????????????3:傳入的不是一個正確的xml格式
//????????????4:info參數中的字段不符合規約中的要求
//????????????5:該條數據已重復發送
//????????????9:本系統處理時發生異常
????????}
?//--?End?createResultXML/

????????

????????
/**////?<summary>
????????
///?將XML格式字符串轉化成DataSet
????????
///?</summary>
????????
///?<param?name="xml">xml字符串</param>
????????
///?<returns>DataSet</returns>?

????????public?static?DataSet?parseResultXML2DataSet(string?xml)
????????
{
????????????DataSet?ds?
=?new?DataSet();????
????????
????????????
//方法一
????????????using(System.IO.StringReader?sr?=?new?System.IO.StringReader(xml))
????????????
{????????????
????????????????ds.ReadXml(sr);
????????????}


//????????????//方法二
//????????????using(System.Xml.XmlReader?xr?=?System.Xml.XmlReader.Create(new?System.IO.StringReader(xml)))
//????????????{
//????????????????ds.ReadXml(xr);
//????????????}

//????????????//方法三
//????????????using(System.IO.Stream?st?=?new?System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml)))
//????????????{
//????????????????ds.ReadXml(st);
//????????????}

????????????
return?ds;
????????}


????????
/**////?<summary>
????????
///?將XML格式字符串轉化成IStructResult
????????
///?</summary>
????????
///?<param?name="xml">xml字符串</param>
????????
///?<returns>IStructResult</returns>?

????????public?static?IStructResult?parseResultXML2Struct(string?xml)
????????
{
????????????IStructResult?structResult?
=?new?IStructResult();
????????????structResult.Clear();

????????????XmlDocument?xmldoc?
=?new?XmlDocument();
????????????
try?
????????????
{
????????????????xmldoc.LoadXml(xml);
????????????}
?
????????????
catch(XmlException?ex)
????????????
{
????????????????structResult.IfResult?
=?-1;
????????????????structResult.IfError?
=?"未能處理的異常返回結果";
????????????????structResult.IfErrorStack?
=?ex.Message;
????????????????
return?structResult;
????????????????
//throw?ex;????????????????????????
????????????}

????????????
????????????
try
????????????
{
????????????????
string?strResult?=?xmldoc.GetElementsByTagName("IfResult").Item(0).InnerText.Trim();
????????????????structResult.IfResult????????
=?strResult.Equals(string.Empty)?-1:int.Parse(strResult);
????????????????structResult.IfError????????
=?xmldoc.GetElementsByTagName("IfError").Item(0).InnerText.Trim();
????????????????structResult.IfErrorStack????
=?xmldoc.GetElementsByTagName("IfErrorStack").Item(0).InnerText.Trim();
????????????????structResult.IfResultInfo????
=?xmldoc.GetElementsByTagName("IfResultInfo").Item(0).InnerText.Trim();
????????????}

????????????
catch(Exception?e)
????????????
{
????????????????structResult.IfResult?
=?-1;
????????????????structResult.IfError?
=?"未能處理的異常返回結果";
????????????????structResult.IfErrorStack?
=?e.Message;
????????????????
return?structResult;
????????????????
//throw?e;????????????????????????????
????????????}

????????????
return?structResult;
????????}

????}



????
/**////?<summary>
????
///?接口返回結果結構體
????
///?</summary>?

????public?struct?IStructResult
????
{
????????
public?int????????IfResult;
????????
public?string????IfError;
????????
public?string????IfErrorStack;
????????
public?string????IfResultInfo;

????????
public?void?Clear()
????????
{
????????????IfResult????????
=?-1;
????????????IfError????????????
=?"";
????????????IfErrorStack????
=?"";
????????????IfResultInfo????
=?"";
????????}

????}

}


接收外部數據
using?System;
using?System.Xml;
using?System.IO;

namespace?BX.Interface
{
????
/**////?<summary>
????
///?IApplyContract?的摘要說明。
????
///?</summary>?

????public?class?IApplyContract
????
{
????????
public?IApplyContract()
????????
{
????????????
//
????????????
//?TODO:?在此處添加構造函數邏輯
????????????
//
????????}
????????

????????
/**////?<summary>
????????
///?接收合同付款申請信息
????????
///?</summary>
????????
///?<param?name="xml"></param>
????????
///?<returns></returns>

????????public?static?string?ReceiveApply(string?interfaceid,?string?xml)
????????
{????????????
????????????XmlDocument?xmldoc?
=?new?XmlDocument();
????????????
try?
????????????
{
????????????????xmldoc.LoadXml(xml);
????????????}
?
????????????
catch(XmlException?ex)
????????????
{
????????????????
//throw?ex;
????????????????return?ICommon.createResultXML(3,ex.Message,"");????????????????
????????????}


try
????????????
{
????????????????action?
=?xmldoc.GetElementsByTagName("action").Item(0).InnerText.Trim();
.
.
//XML節點解析//
.
.
}

????????????
catch(Exception?e)
????????????
{
????????????????
//throw?e;
????????????????return?ICommon.createResultXML(4,e.Message,"");????????????????
????????????}
????

string?strSQL?=?"INSERT?INTO?dbo.bx_apply_interface?()?Values()";
try
????????????
{
????????????????
//檢測是否重復提交
????????????????string?sqlJudge?=?"SELECT?MAX(receive_time)?AS?lstTime?FROM?dbo.bx_apply_interface";
????????????????sqlJudge?
+=?"?WHERE?prjid='"+contract_prjid+"'?AND?cttid='"+contract_cttid+"'?AND?expandid='"+contract_expandid+"'";
????????????????
object?objTime?=?BX.DAL.DBHelper.ExecuteScalar(sqlJudge);
????????????????
if(objTime?!=?DBNull.Value)
????????????????
{
????????????????????
string?lstTime?=?Convert.ToString(objTime).Trim();
????????????????????
if(!lstTime.Equals(string.Empty))
????????????????????????
return?ICommon.createResultXML(0,"該條數據已于"+lstTime+"成功傳入網上報銷系統!\n操作忽略!","0");
????????????????????????
//return?ICommon.createResultXML(5,"該條數據已于"+lstTime+"成功傳入網上報銷系統!\n不能重復提交!","1");
????????????????}


????????????????BX.DAL.DBHelper.ExecuteNonQuery(strSQL);
????????????}
?
????????????
catch(System.Data.SqlClient.SqlException?exSQL)
????????????
{
????????????????
//throw?exSQL;
????????????????return?ICommon.createResultXML(9,exSQL.Message,"1");????????????????
????????????}


????????????
return?ICommon.createResultXML(0,"","0");
????????}
????????
????}

}

?

調用外部接口發送數據
using?System;
using?System.Xml;
using?System.Data;

namespace?BX.Interface
{
????
/**////?<summary>
????
///?ISendAuditResult?的摘要說明。
????
///?</summary>

????public?class?ISendAuditResult
????
{

????
/**////?<summary>
????????
///?調用網上報銷審批系統傳遞審批結果信息接口????????
????????
///?</summary>
????????
///?<param?name="info"></param>
????????
///?<returns>IStructResult</returns>

????????public?static?string[]?invoke(StructAuditResult?v_struct)
????????
{
????????????
string?WSDL?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_WSDL"];
????????????
string?SvClsName?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_SvClsName"];
????????????
string?WebMethod?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_WebMethod"];
????????????
string?ifCode?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_ifCode"];
????????????
string?ifPass?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_ifPass"];????????????
????????????
string?ifEvent?=?System.Configuration.ConfigurationSettings.AppSettings["ISendAuditResult_ifEvent"];????
????????
????????????
string?info?=?creatXML(v_struct);
//????????????object[]?args?=?new?object[]{ifCode,ifPass,ifEvent,info};????????
????????????
//????????????return?ICommon.parseResultXML2Struct(ICommon.getSoapService(WSDL,?SvClsName,?WebMethod,?ifCode,?args));

????????????
//int?GetPrjCttPayment(string?ValPWD,string?xmlContent,ref?string?ErrorInfo);????????????
????????????object[]?args?=?new?object[]{ifPass,info,""};
????????????
int?ret?=?int.Parse(ICommon.getSoapService(WSDL,?SvClsName,?WebMethod,?ifCode,ref?args));
????????????
????????????
string[]?resultInfo?=?new?string[2];
????????????resultInfo[
0]?=?ret.ToString();
????????????resultInfo[
1]?=?Convert.ToString(args[2]).Trim();//返回錯誤信息
????????????return?resultInfo;
????????}


????????
private?static?string?creatXML(StructAuditResult?v_struct)
????????
{?return?xmldoc.InnerXml;}

???}

}

轉載于:https://www.cnblogs.com/fery/archive/2010/08/01/1790094.html

總結

以上是生活随笔為你收集整理的C#开发XML WebService接口(SOAP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。