消息(6)——WCF,构建简单的WCF服务,MTOM编码
构建一个简单的WCF服务。
以Web服务类似的步骤由IIS进行宿主服务。建立的步骤:
1 新建3.5网站
2 添加WCF服务,自动生成契约接口与实现,这里改动一下,添加个字串参数:
[ServiceContract]
public interface IFirstService
{
[OperationContract]
void DoWork(string strContent);
}
服务中的方法什么都不用做。
public class FirstService : IFirstService
{
public void DoWork(string strContent)
{
}
}
在添加WCF服务时,会自动在配置文件中添加必要的章节,例如绑定和元数据发布。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="FirstServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="FirstServiceBehavior"
name="FirstService">
<endpoint address=""
binding="basicHttpBinding"
contract="IFirstService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
这里把绑定改一下,改为basicHttpBinding。
然后在测试端:新建立类库项目,由发布的元数据生成代理,然后进行服务请求:
[Test]
public void Test()
{
FirstInstance.FirstServiceClient client =
New FirstInstance.FirstServiceClient();
client.DoWork("this is a test!");
}
现在看一下消息包的情况:
这是客户端请求的信息:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<DoWork xmlns="http://tempuri.org/">
<strContent>this is a test!</strContent>
</DoWork>
</s:Body>
</s:Envelope>
这是服务端回应的信息:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<DoWorkResponse xmlns="http://tempuri.org/"/>
</s:Body>
</s:Envelope>
对于BasicHttpBinding来说,它通过http来发送soap1.1的消息。这个绑定用于配置和公开能够与基于asmx的web service和客户端进行通信的终结点,以及符合ws-i basic profile 1.1标准的其它服务。
通过设置WCF绑定的消息编码格式来设置传输过程中所使用的编码:
<basicHttpBinding>
<binding name="firstBinding" messageEncoding="Text">
</binding>
</basicHttpBinding>
现设置BasicHttp绑定的消息编码为文本,当传输二进制附件时,会怎么用base64编码:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SaveImage xmlns="www.self001.com">
<bb>GMDggAOw==</bb>
</SaveImage>
</s:Body>
</s:Envelope>
其中附件部分我省略了大部分,只留一小段。
当使用MTOM编码格式时:
--uuid:deef670a-dfd7-4a71-8d89-face6ac975dd+id=1
Content-ID: <http://tempuri.org/0>
Content-Transfer-Encoding: 8bit
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SaveImage xmlns="www.self001.com">
<bb>
<xop:Include
href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634057273450156250"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</bb>
</SaveImage>
</s:Body>
</s:Envelope>
--uuid:deef670a-dfd7-4a71-8d89-face6ac975dd+id=1
Content-ID: <http://tempuri.org/1/634057273450156250>
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
GIF89ad……省略
--uuid:deef670a-dfd7-4a71-8d89-face6ac975dd+id=1--
这与WSE3中使用的MTOM是相同的。
转载于:https://www.cnblogs.com/jams742003/archive/2010/04/01/1702277.html
消息(6)——WCF,构建简单的WCF服务,MTOM编码相关推荐
- 构建简单的微服务架构
前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:docs.xin-lai.com 目录 总体介绍 微服务架构的好处 微服务架 ...
- 利用Vert.x构建简单的API 服务、分布式服务
目前已经使用Vertx已经一年多了,虽然没有太多的造诣,但也已在项目中推广了下:从最初的vertx搭建web服务,到项目上线运营,还算比较稳定.再到后来尝试搭建基于vertx的分布式服务,一路下来也积 ...
- spark restful_使用Spark构建简单的RESTful API
spark restful 免责声明 :这篇文章是关于名为Spark的Java微型Web框架的,而不是关于数据处理引擎Apache Spark的 . 在此博客文章中,我们将看到如何使用Spark构建简 ...
- 使用Spark构建简单的RESTful API
免责声明 :这篇文章是关于名为Spark的Java微型Web框架的,而不是关于数据处理引擎Apache Spark的 . 在此博客文章中,我们将看到如何使用Spark构建简单的Web服务. 如免责声明 ...
- 我的WCF之旅(1):创建一个简单的WCF程序
http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一 ...
- 创建一个简单的WCF程序
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- WCF 创建简单的CF程序VS2008
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- c#进阶(5)—— WCF 实现简单预订功能
1.WCF概述 WCF全称为Windows Communication Foundation,在.Net 3.0 中引入,用于客户端与服务端通信,替换了之前的一些技术,如.Net Remoting 及 ...
- 用ExtJs+Linq+Wcf打造简单grid
本系列文章列表 1)Ajax访问Xml Web Service的安全问题以及解决方案 2)Ajax与WCF交互-WCF之美 3) Ajax与Wcf交互-JSON 4) ExtJs与WCF交互:生成树 ...
最新文章
- 超详细的Guava RateLimiter限流原理解析
- Ruby Cucumber环境
- Java黑皮书课后题第4章:*4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数。如果月份非法则显示出错信息
- 关于 mysql 在联合查询时,使用 concat 拼接查询条件
- crs-4124 Oracle 11gR2 RAC ohasd failed to start 解决方法
- 线性表—顺序表-顺序表基本运算的实现
- python socket 游戏_python socket模拟游戏开服
- 佛系听歌?Beats推出“串珠”耳机 盘它?
- 三月提示:提防挂马网站 关注账号安全
- Java 函数传递对象是引用传递还是值传递?
- sql server sysobjects 中type 和xtype
- windows下快速安装nginx并配置开机自启动的方法
- 超详细傻瓜iPhone自定义来电铃声教程
- 2022年煤气考试试题及答案
- 用Matlab搞了个小工具,以后给你女朋友的证件照换底色再也不用发愁了
- Android实时音视频如何快速实现回声消除
- 域名与DNS域名系统
- E盘里多了个ppsds.pgf文件是怎么回事?
- mongodb mysql配置_Mongodb 配置
- Java 中tag配置文件中的标签属性意思