C#,SOAP1.1与1.2的发布与禁用(SOAP 1.2 in .NET Framework 2.0)
来源:https://www.codeproject.com/Articles/11878/SOAP-in-NET-Framework
SOAP 1.2 in .NET Framework 2.0
Introduction
SOAP version 1.2 (SOAP) is a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment. It uses XML technologies to define an extensible messaging framework providing a message construct that can be exchanged over a variety of underlying protocols. The framework has been designed to be independent of any particular programming model and other implementation specific semantics.
The technological foundation that makes up Web services includes SOAP, the Web Service Description Language (WSDL), Universal Description, Discovery, and Integration (UDDI), and XML. Specifically, SOAP provides a heterogeneous mechanism to allow the invocation and communication between Web services.
Some of the shortcomings of the SOAP 1.1 has been clarified, updated and corrected in SOAP 1.2. SOAP 1.2 contains a number of issues such as those on interoperability and ambiguities that resulted in differences of interpretation.
SOAP 1.1 is based on XML 1.0 and can only use HTTP POST headers to transmit SOAP messages. As a result, it isn't really suitable for wide-scale applications.
SOAP 1.2
SOAP 1.2 provides a tighter, more robust set of specifications based on an abstract model for binding protocols and XML serialization schemes. SOAP 1.2 also has been tested by a wide variety of participants, including IBM, Microsoft, Sun Microsystems, BEA systems, and the Apache Software Foundation. It has undergone many reviews and drafts and has seen a tremendous amount of public feedback. The W3C tested the interoperability of the specifications by successfully implementing seven projects.
SOAP 1.2 is now extensively documented in three parts: a Primer, Complete Messaging Framework, and Model and Optional Add-ins. SOAP 1.2 is now defined as an XML infoset, not XML syntax.
SOAP Version Information
- SOAP 1.1
- SOAP 1.2
Comparison between SOAP 1.1 and SOAP 1.2
- SOAP 1.1 is based on XML 1.0; SOAP 1.2 is based on XML Infoset.
- In SOAP 1.2 it is left to the specification of a binding to an underlying protocol to specify the XML serialization used in the underlying protocol data units.
- The HTTP binding specified in SOAP 1.2 uses XML 1.0 as the serialization format of the SOAP message infoset.
- SOAP 1.1 allows additional elements to follow the SOAP Body element, SOAP 1.2 disallows these.
- SOAP 1.1 has the actor attribute. In SOAP 1.2 this attribute is renamed to role. The semantics of the attribute are unchanged.
- SOAP 1.2 adds two new predefined roles to the existing "Next" role in SOAP 1.1:
- "None" for header blocks that should never be directly processed.
- "Ultimate Receiver" for header blocks that should only be processed by nodes acting as the ultimate receiver of a message.
- HTTP GET support
Carrying of a SOAP 1.1 message was discussed using only HTTP POST. SOAP 1.2 adds support for the use of HTTP GET in the SOAP HTTP binding. The semantics of HTTP GET are respected such that the action performed by SOAP endpoint responding to a request transmitted via HTTP GET should be both safe and idempotent.
Rules for dealing with SOAP 1.1 and SOAP 1.2 version interactions are as follows:
- When a SOAP 1.2 message reaches a SOAP 1.1 node it will generate a SOAP fault containing a version mismatch.
- When a SOAP 1.2 node receives a SOAP 1.1 message it can do one of the two things as stated below:
- The node may process the SOAP 1.1 message.
- It generates a Fault containing a Version Mismatch.
SOAP 1.2 in .NET Framework 2.0
The new ASMX runtime in .NET 2.0 supports SOAP 1.2. At this moment SOAP 1.1 is most widely being used in the industry. In the .NET Framework both SOAP 1.1 and SOAP 1.2 are supported. This means that the Web Services created in .NET Framework 2.0 will be configured to support both SOAP 1.1 and SOAP 1.2 messages. This indirectly means that the WSDLs thus created for the Web Service will have two types of bindings, i.e., SOAP 1.1 and SOAP 1.2.
<wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
<wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
Whether both these bindings have to be added to the web service can be configured by enabling or disabling them from the web.config file.
<configuration>
<system.web>
<webServices>
<protocols>
<remove name="HttpSoap12"/>
</protocols>
</webServices>
</system.web>
</configuration>
Replace "HttpSoap12" with "HttpSoap" to remove the SOAP 1.1 binding.
The enumeration value must be one of the following: Unknown, HttpSoap, HttpGet, HttpPost, Documentation, HttpPostLocalhost, HttpSoap12, AnyHttpSoap.
Creating a SOAP 1.2 Web Service in Microsoft Visual Studio 2005 Beta 2
- Click on “File—New—Web Site”.
- Select folder “E:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\WebServices\WebSite1”.
Here we can use IIS (then we need to specify HTTP in the Location dropdown list). Visual Studio 2005 supports internal server, thus IIS is not required. We can use the test server. It is known as the file system.
- Select language as C#.
- Open the Service.cs file.
- Namespaces that are included are:
Hide Copy Code
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols; - Create a WebMethod:
Hide Copy Code
[WebMethod]
public long CheckBalance(int iAccountNo)
{
//Business Logic......
//return balance
return iBalance;
} - Now edit the web.config file to allow or disallow various protocols used for invocation as described above.
- Go to the WebService properties and turn off NTLM authentication.
- Build the solution
SOAP request and response
SOAP 1.1
Copy CodeRequest:
POST /WS1/Service.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/CheckBalance" <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CheckBalance xmlns="http://tempuri.org/">
<iAccountNo>int</iAccountNo>
</CheckBalance>
</soap:Body>
</soap:Envelope> Response:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CheckBalanceResponse xmlns="http://tempuri.org/">
<CheckBalanceResult>long</CheckBalanceResult>
</CheckBalanceResponse>
</soap:Body>
</soap:Envelope>
SOAP 1.2
Copy CodeRequest:
POST /WS1/Service.asmx HTTP/1.1
Host: localhost
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CheckBalance xmlns="http://tempuri.org/">
<iAccountNo>int</iAccountNo>
</CheckBalance>
</soap12:Body>
</soap12:Envelope> Response:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CheckBalanceResponse xmlns="http://tempuri.org/">
<CheckBalanceResult>long</CheckBalanceResult>
</CheckBalanceResponse>
</soap12:Body>
</soap12:Envelope>
WSDL (binding elements)
<wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="CheckBalance">
<soap:operation
soapAction="http://tempuri.org/CheckBalance" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="CheckBalance">
<soap12:operation
soapAction="http://tempuri.org/CheckBalance" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
Client Side
On the client side, WSDL.EXE generates SOAP 1.1 proxy code by default. There is a /protocol command line option to WSDL.EXE that allows you to specify which version to use. /protocol:SOAP generates a SOAP 1.1 client and /protocol:SOAP12 generates a SOAP 1.2 client:
C:\>wsdl /o: proxy.cs /protocol:SOAP http://localhost:2881/WS1/Service.asmx
Microsoft (R) Web Services Description Language Utility
[Microsoft(R) .NET Framework, Version 2.0.40607.85]
Copyright (C) Microsoft Corporation. All rights reserved. Writing file 'proxy.cs'. C:\>wsdl /o: proxy12.cs /protocol:SOAP12 http://localhost:2881/WS1/Service.asmx
Microsoft (R) Web Services Description Language Utility
[Microsoft(R) .NET Framework, Version 2.0.40607.85]
Copyright (C) Microsoft Corporation. All rights reserved. Writing file ‘proxy12.cs'. C:\>
The System.Web.Services.Protocols.SoapHttpClientProtocol class that is used as the base class of the generated client proxies has a new property SoapVersion. This is set to SoapProtocolVersion.Soap12 to indicate that SOAP 1.2 should be used. The correct binding name is also chosen from the WSDL.
License
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
C#,SOAP1.1与1.2的发布与禁用(SOAP 1.2 in .NET Framework 2.0)的更多相关文章
- 发布Framework 4.0到iis时,出现HTTP 错误 403.14 - Forbidden
新发布MVC到服务器的时候,经常碰到403.14错误,绝大部分的时候都是因为Framework 4.0需要重新注册下,在运行里输入:C:\Windows\Microsoft.NET\Framework ...
- Spring Framework 4.0.0发布,首次支持Java 8
Spring项目组今天发布了Spring 框架4.0.0版本.Spring是一个开源的轻量级Java SE和Java EE开发应用框架,其目的是用于简化企业级应用程序开发. Spring框架第一个版本 ...
- IIS首次发布VS2012创建的web应用程序时注册.net4.0
最近用VS2012创建的web应用程序,.net环境设置成了4.0,在用IIS发布的时候发现需要注册下.net4.0才能配置应用程序. 首先确保配置的电脑上已经安装了.net4,找到.net4所在文件 ...
- 发布并开源自己的一款 基于.Net 4.0 及 netstandard2.0 的 ORM 框架
这款ORM框架的原版在经历过大概十几个项目的磨合,最近整理了一下,原名字为:ZhCun.Framework ,该框架辗转跟了我去过几家公司,大概从2012年出现第一个版本,当时就为简化数据库操作,从优 ...
- WCF技术的不同应用场景及其实现分析
这一篇文章,是总结一下WCF技术,以及基于这个技术发展出来的几个典型应用场景,并且我将尝试对这些不同的WCF实现的原理进行一些比较分析. 关于WCF这个技术的基本概念,如果你不是很清楚,可以参考一下有 ...
- 你的项目应当使用Spring Boot吗?(译文)
注:这是一篇译文,参考链接:https://www.e4developer.com/2018/09/24/should-you-use-spring-boot-in-your-project/ Spr ...
- axis2设置soap1.1或soap1.2协议
现在Axis.Axis2都是同时支持SOAP1.1和SOAP1.2的.即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版 ...
- ASP.NET MVC 应用,站点发布到本地IIS
材料准备 visual studio 2013 , iis 7 具体步骤 1.以管理员身份启动visual studio 2.新建项目 web app 或者站点 3.编译项目 4.右击项目选择publ ...
- IIS7.0发布Web服务器0002
asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 分类: BS学 ...
随机推荐
- 若所有的参数皆需要类型转换——请为此采用non-member函数
若所有的参数皆需要类型转换--请为此采用non-member函数 经常使用C++的程序猿(希望更多的程序媛),一般不会同意让classes支持类型转换,至于为什么,请看后续的博客.假如我们设计一个表示 ...
- 51nod1295
题解: 考虑到是异或,那么就是位运算 位运算会想到什么?当然是按位拆开 那么就变成了一个个的字符串 考虑了trie 可是貌似有多个问题 那么就用可持久化trie! 代码: #include<bi ...
- Python Face Recognition 实现人脸识别
一.Face Recognition软件包 我们的人脸识别基于face_recognition库.face_recognition基于dlib实现,用深度学习训练数据,模型准确率高达99.38%. 人 ...
- Django(五)在模板中使用静态文件
location 最后一个文件夹名就是project名,我用了Django_Plan. Application 是自动加入的APP名字,我用了Plan 静态文件相关配置: Django_Plan\se ...
- Memcached 扩展常用方法
保存数据 向memcached保存数据的方法有 add replace set 它们的使用方法都相同: $add = $memcached->add( '键', '值', '期限' ); $re ...
- 4K电视与4K显示器的选择
目前主流的电脑显示器分辨率是1920x1080,也就是常说的FHD标准,不过在智能手机都开始朝2560x1440前进了,PC显示器显然还需要更进一步的强化,下一代的标准就是4K分辨率,也就是Utlra ...
- 2018-2019-2 网络对抗技术 20165202 Exp2 后门原理与实践
博客目录 一.基础问题回答 二.实验准备:后门软件 1.Windows获得Linux Shell 2.Linux获得Windows Shell 3.使用nc传输数据 4.使用ncat实现文件传输 三. ...
- NSScanner
NSScanner NSScanner:该类主要实现对字符串扫描.并且该扫描必须从头到尾扫描(也可以跳到指定的地方进行扫描),开始扫描必须应用到函数,连续的数字之间可以用空格隔开,如:35 15.2 ...
- react和vue——比较
相同点: 1.JavaScript的UI框架.专注于创造前端的富应用. 2.都有虚拟DOM,DOM树的虚拟表现------改变真实的DOM状态比改变一个JavaScript对象的花销要大得多. Vir ...
- 7.3 5种IO模型与IO复用
5种IO模型分别如下: 1.阻塞IO模型 当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层app1将阻塞(默认行为,被linux内核阻塞). 当对等方发送了数据 ...