ASP.NET中使用HttpWebRequest调用WCF

摘要:
在ASP.NET中,使用HttpWebRequest调用WCF,最近的项目需要与第三方网站交换数据,这些网站基本上是RESTful API,但有些是.NET中的WebServices或WCF。微软鼓励人们使用WCF而不是Web服务。为了实现这些服务并与其他软件通信,这个新应用程序将使用WCF。我最初想演示调用WebService。我的电脑只安装了vsexpressforweb,没有安装。netframework3.5,所以我只能演示调用WCF。wsdl“);myRequest.Method=“POST”;myRequest.ContentType=“text/xml;Charset=utf-8“;myRequest.Headers.Add;myRequest.ContentLength=bs.Length;使用{reqStream.Write;}使用{StreamReadermysr=newStreamReader;stringressponseResult=mysr.ReadToEnd();Response.Write();}}//捕获异常捕获{Response.Write;Respons.Write;}http://tempuri.org/“”˃123xmlns这里通常不是http://tempuri.org/,通常是实际公司网站的域名。
ASP.NET中使用HttpWebRequest调用WCF

最近项目需要和第三网站进行数据交换,第三方网站基本都是RESTfull形式的API,但是也有的是Web Service,或者.NET里面的WCF。微软鼓励大家使用WCF替代Web Service。

Web Service技术介绍

Web Service是一个平台独立的,松耦合的,自包含的、基于可编程的Web应用程序,可使用开发的XML数据标准来描述、发布、发现、协调和配置这些应用程序,同时用于开发分布式的互操作的应用程序。

WCF技术介绍

WCF是Web Service的升级版本。WCF是Windows Communication Foundation的缩写。是一个运行库和一组 API,用于创建在服务与客户端之间发送消息的系统。它使用相同的基础结构和 API 来创建应用程序,这些应用程序可与同一计算机系统上或驻留在另一家公司内并通过 Internet 访问的系统上的其他应用程序进行通信。

案例需求:一家汽车租赁公司决定创建一个新的应用程序,用于汽车预定。该租车预定应用程序的创建者知道,应用程序所实现的业务逻辑必须能够让公司内外运行的其他软件访问。因此,他们决定以面向服务的方式来创建此应用程序,并通过定义完善的一组服务,将此应用程序的逻辑公开给其他软件。为了实现这些服务并使之与其他软件进行通信,这一新应用程序将使用 WCF。

租车方案

【说明】本来想演示调用Web Service,自己的电脑只装vs express for web,也没有安装.net framework3.5,所以只能演示调用WCF。

自动化调用Web CF实例

第1步:创建一个WCF项目,一个空的Web项目,添加一个Default form。

image

第2步:对于WcfService_Server项目,我们不需要修改任何代码,因为创建的时候自动创建了2个web method。在WcfService_Client的引用文件夹右键,如下图所示,点击“添加服务引用”。

image

第3步 如果自己项目中WCF服务不是非常多,可以点击“发现”,如果知道WCF项目的发布地址也是可以的。如下图所示:

image

第4步 点击“确定”之后,你会发现项目中多了一个“Service References”文件夹,如下图所示:

image

同时Web.config也发生了改变,多了下面这些代码:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:54875/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>

后台C#代码调用WCF的实例

try
            {
                string param = @"<?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>
                                            <GetData xmlns=""http://tempuri.org/"">
                                              <value>123</value>
                                            </GetData>
                                          </soap:Body>
                                        </soap:Envelope>";
                byte[] bs = Encoding.UTF8.GetBytes(param);
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://localhost:54875/Service1.svc?wsdl");

                myRequest.Method = "POST";
                myRequest.ContentType = "text/xml;charset=utf-8";
                myRequest.Headers.Add("SOAPAction", "http://tempuri.org/IService1/GetData");
                myRequest.ContentLength = bs.Length;

                using (Stream reqStream = myRequest.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                }
                using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse())
                {
                    StreamReader mysr = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                    string responseResult = mysr.ReadToEnd();
                    Response.Write("结果:" + responseResult);
                }
            }
                //捕获异常
            catch(Exception ex)
            {
                Response.Write(ex.ToString());
                Response.Write(ex.StackTrace);
            }

程序运行结果截图:

image

以上代码有2处需要注意的地方:

1.<GetData xmlns=""http://tempuri.org/""> <value>123</value> </GetData>

这里的xmlns一般情况下不是http://tempuri.org/,一般都会是实际公司的网站域名。如果对方也是WCF写的服务端的话,可以进入如下图所示界面,然后点击以”?wsdl”结尾的链接。

image

可以看到是一个xml文件,里面有一个image

2.如果是通过soap1.1的协议,可能也会写上这一行代码:myRequest.Headers.Add("SOAPAction"http://tempuri.org/IService1/GetData);

但是这个值是哪里来的呢?[大多数情况下,我们是在调用第三方的web service,看不到对方的源代码]

image

上图wsdl描述了输入的soapation的值。http://tepuri.org/IService1/GetData

因为我这里新建的WCF项目是需要IIS或者Developer server来运行,同时Client端本身也是一个web项目。可以把WCF项目放在IIS里面,或者使用IIS Express进行调试。

参考网址:

1.WCF Web API说再见,继承者ASP.NET Web API

http://www.cnblogs.com/shanyou/archive/2012/03/11/2390672.html

2.什么是WCF? http://msdn.microsoft.com/zh-cn/library/ms731079(v=vs.90).aspx

3.http://www.cnblogs.com/macroxu-1982/archive/2009/12/23/1630415.html

4.http://www.cnblogs.com/lantionzy/archive/2010/05/26/1744826.html

 

本文基于 知识共享许可协议 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议发布,欢迎转载,演绎,但是必须保留本文的署名liminjun88(包含链接http://www.cnblogs.com/liminjun88/),
且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

 

免责声明:文章转载自《ASP.NET中使用HttpWebRequest调用WCF》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PyTorch笔记之 Dataset 和 Dataloader使用ElasticSearch服务从MySQL同步数据实现搜索即时提示与全文搜索功能下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wcf通道Channel

正文       客户端与服务进行交互的过程是通过通道进行交互的。客户端通过调用代理类执行相应的方法,通过通道编码,调用上下文,传输客户端的事务,管理可靠会话,对消息正文的加密,最后要执行的通道是传输通道就像我们七层的最后一层是物理传输层与服务端的那一头的传输通道交接。服务端拿到以后会逐个拆包,然后交给分发器,分发器交给对应的服务处理。         ...

WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

背景:WindowsService + WCF + NetTcpBinding 之前一直使用http协议模式,改为net.tcp之后隔段时间出现:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 127.0.0.1:9000 记录时间:2016-01-14 10:02:58日志级别:Exception 日志位置:CloudTraPlatSOA....

WCF中的数据契约(Continued)

版本化数据契约 变化是不可避免的。业务的改变,技术的改变,规则的改变,这些都会造成软件契约的变化。面对软件的变化,一个稳定的版本策略是必不可少的。必须注意对不可避免的变化进行预先的筹划,并对当前的客户端保证向后的兼容性。 最常见的对版本化契约的需求是,当现有数据契约中添加新的成员时。按照不间断的版本更改的描述,你可以自由更改,而不需要终止现有的客户端。但...

.Net编程之Web Service 和WCF的历史和特性

Web Service 的工作原理       Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。WebService可用基...

【转载】通过服务端监控结果,说说WCF的并发处理

InstanceContextMode表示的是,WCF允许产生可用来处理包含在传入消息中的调用的服务(契约类)的实例InstanceContext模式数,WCF的并发模式ConcurrencyMode是针对某个封装了服务实例的InstanceContext而言的 简单的说,InstanceContextMode表示产生多少个服务实例对象,Concurren...

Android基于ksoap2调用WCF服务(二):Android篇

上一篇通过一个非常简单的例子,完成了一个WCF的服务。接下来介绍一下Android端。 Android端调用WCF,采用基于ksoap2包来实现。 下载地址(这个需要fan qiang访问,你们懂的):https://code.google.com/p/ksoap2-android/ 我用的3.3.0版本,我传到csdn上,上面地址如果不能访问,可以用这个...