• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#调用和实现WebService,纯手工打造!

C#调用和实现WebService,纯手工打造!

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了纯手工打造,纯手工打造刀,纯手工打造汽车,劳斯莱斯纯手工打造,纯手工打造跑车等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

先为啥要纯手工打造呢,因为对方是用C++做的,我按照他们给出的WSDL实现了一个WebService,结果他们完全不能调用。具体是他们调用的问题还是WSDL定义的问题,不可考了。

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

 

首先用C#调用对方的WebService。
因为对方用的C++实现,添加Web服务引用方式无效……直接添加WSDL的调用对方不认……

只好手工打造,还好C#足够强大。

HttpWebRequest类可以简单的实现WebService调用。

 

首先手工打造SOAP包内容


</div>
构造HttpWebRequest对象


发送请求

</div>
获取返回信息

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

当然手工打造就是累……

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

不提了。

C#实现WebService给对方调用
按照我的理解,WebService底层是SOAP,本质上就是一个TCP的短连接。

解决的思路就是用C#来实现一个TCP的服务端,然后手工分析请求内容。

</div>
接收连接,并且获取请求内容

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

// 只处理 "POST"请求类型
if (sBuffer.Substring(0, 4) != "POST")
{
    return;
}
</div>
截取soap:Body部分

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


</div>
分析请求内容这里就略了。

返回消息的构造如下。

首先构造消息体内容


</div>
构造消息头部

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);

</div>
然后发送给对方,关闭Socket。

mySocket.Close();

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#调用和实现WebService,纯手工打造!

相关文章

  • 2017-05-28C#职责链模式实例详解
  • 2017-05-28c# 类型转换
  • 2017-05-28C#设置WinForm中DataGrid列的方法(列宽/列标题等)
  • 2017-05-28C#使用foreach语句简单遍历数组的方法
  • 2017-05-28c#中判断字符串是不是数字或字母的方法
  • 2017-05-28C#中实现Fluent Interface的三种方法
  • 2017-05-28轻松学习C#的运算符
  • 2017-05-28c#继承中的函数调用实例
  • 2017-05-28详谈C# 图片与byte[]之间以及byte[]与string之间的转换
  • 2017-05-28C#实现DataGridView控件行列互换的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c# winform 关闭窗体时同时结束线程实现思路
    • C#对多个集合和数组的操作方法(合并,去重,判断)
    • C#检测是否有危险字符的SQL字符串过滤方法
    • C#多线程处理多个队列数据的方法
    • 详解C#用new和override来实现抽象类的重写区别
    • C# 创建文本文件写入读取实现代码
    • C#导出Excel的方法
    • C#条件语句、循环语句(if、while)
    • C#中文件名或文件路径非法字符判断方法
    • C#读取xml节点数据方法小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有