麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

C#調用和實現WebService,純手工打造!

2020-01-24 03:36:04
字體:
來源:轉載
供稿:網友

先為啥要純手工打造呢,因為對方是用C++做的,我按照他們給出的WSDL實現了一個WebService,結果他們完全不能調用。具體是他們調用的問題還是WSDL定義的問題,不可考了。

悲催的弱勢方……只能我們去配合他們。不提了。

 

首先用C#調用對方的WebService。
因為對方用的C++實現,添加Web服務引用方式無效……直接添加WSDL的調用對方不認……

只好手工打造,還好C#足夠強大。

HttpWebRequest類可以簡單的實現WebService調用。

 

首先手工打造SOAP包內容

復制代碼 代碼如下:

string soap =
    "<soapenv:Envelope xmlns:soapenv=/"http://schemas.xmlsoap.org/soap/envelope//" xmlns:down=/"http://down.wsdl.position.mdd.ailk.com/" xmlns:in=/"http://in.object.down.wsdl.position.mdd.ailk.com/">"
    + "<soapenv:Header/>"
    + "<soapenv:Body>"
    + "<TestFunc>"
        + "<object>Test Message</object>"
    + "</TestFunc>"
    + "</soapenv:Body>"
    + "</soapenv:Envelope>";



構造HttpWebRequest對象

復制代碼 代碼如下:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:8088/");
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.Headers.Add("SOAPAction", "/TestFunc");
byte[] bts = Encoding.UTF8.GetBytes(soap);


發送請求

復制代碼 代碼如下:

request.ContentLength = data.Length;
Stream writer = request.GetRequestStream();
writer.Write(data, 0, data.Length);
writer.Close();


獲取返回信息

復制代碼 代碼如下:

StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
String retXml = sr.ReadToEnd();
sr.Close();

之后按照WSDL的定義,解析返回的XML串就好了。

當然手工打造就是累……

如果是標準的WebService,直接一句string str = Serv.TestFunc(“”);

不提了。

C#實現WebService給對方調用
按照我的理解,WebService底層是SOAP,本質上就是一個TCP的短連接。

解決的思路就是用C#來實現一個TCP的服務端,然后手工分析請求內容。

復制代碼 代碼如下:

//開始監聽端口
myListener = new TcpListener(IPAddress.Parse(ListenIpAddr), ListenPort);
myListener.Start();


接收連接,并且獲取請求內容
復制代碼 代碼如下:

//接受新連接
Socket mySocket = myListener.AcceptSocket();
string sBuffer = "";
Byte[] bReceive = new Byte[2048];

// 接收請求內容
int i = mySocket.Receive(bReceive, bReceive.Length, 0);
sBuffer = Encoding.ASCII.GetString(bReceive);

// 只處理 "POST"請求類型
if (sBuffer.Substring(0, 4) != "POST")
{
    return;
}


截取soap:Body部分
復制代碼 代碼如下:

string soap = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>/n";
int iStartPos = sBuffer.IndexOf("<soap:Body>", 1);
int iStopPos = sBuffer.IndexOf("</soap:Body>", 1);

if (iStartPos > 0)
{
    soap = soap + sBuffer.Substring(iStartPos, iStopPos - iStartPos + 9);
}



分析請求內容這里就略了。

返回消息的構造如下。

首先構造消息體內容

復制代碼 代碼如下:

string ret = string.Format(
            ""
            + "<soapenv:Envelope xmlns:soapenv=/"http://schemas.xmlsoap.org/soap/envelope//" xmlns:down=/"http://down.wsdl.position.mdd.ailk.com/" xmlns:out=/"http://out.object.down.wsdl.position.mdd.ailk.com/">/n"
            + "<soapenv:Header/>/n"
            + "<soapenv:Body>/n"
            + "<TestRsp>/n"
            + "<object ResultCode=/"0/"/>/n"
            + "</TestRsp>/n"
            + "</soapenv:Body>/n"
            + "</soapenv:Envelope>"
            );
byte[] bytes = Encoding.ASCII.GetBytes(ret);



構造消息頭部

復制代碼 代碼如下:

// 構造頭部
String sMimeType = "text/html";
string sHttpVersion = "HTTP/1.1 ";
String sBuffer = "";

if (sMIMEHeader.Length == 0)
{
    sMIMEHeader = "text/html"; // 默認 text/html
}

sBuffer = sBuffer + sHttpVersion + " 200 OK" + "/r/n";
sBuffer = sBuffer + "Server: cx1193719-b/r/n";
sBuffer = sBuffer + "Content-Type: " + sMimeType + "/r/n";
sBuffer = sBuffer + "Accept-Ranges: bytes/r/n";
sBuffer = sBuffer + "Content-Length: " + iTotBytes + "/r/n/r/n";

Byte[] heads = Encoding.ASCII.GetBytes(sBuffer);


然后發送給對方,關閉Socket。

復制代碼 代碼如下:

mySocket.Send(heads, heads.Length, 0);
mySocket.Send(bytes, bytes.Length, 0);

mySocket.Close();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品视频成人 | 精品国产一区二区三区四 | 最新av网址在线观看 | 午夜视频久久 | 国产无遮挡一区二区三区毛片日本 | 久久国产精品久久久久久久久久 | 成人精品aaaa网站 | 欧美爱爱一区二区 | 在线观看视频毛片 | 日韩精品中文字幕一区二区 | 视频一区国产精品 | 亚洲日韩精品欧美一区二区 | 法国极品成人h版 | 免费一级在线观看 | 亚洲精品午夜电影 | 欧美日韩在线免费观看 | 久久久久久久久久久影视 | 性生活香蕉视频 | 欧美3p激情一区二区三区猛视频 | 国产精品久久久在线观看 | 成人免费一区二区三区在线观看 | 日本中文一级片 | 日日做夜夜操 | 日本成年免费网站 | 粉色视频污| 国产精品久久久久久久久久东京 | 美女黄污视频 | 日本成人一二三区 | 久久9999久久 | 久久久日韩精品一区二区 | 九九热九九热 | 亚洲欧美一区二区三区在线观看 | 国产成人精品二区 | 久久久久久久.comav | av成人免费看 | 久久大陆 | 亚洲精品一区二区三区免 | 黑人日比| 久久精品99国产国产精 | 国产亚洲精品久久久久久久软件 | 国产亚洲精品久久久久久网站 |