关于WCF的引用,添加服务和添加web服务的区别

原文:关于WCF的引用,添加服务和添加web服务的区别

 本章内容主要是根据我做的实验来阐述这2种添加服务针对WCF的不同之处,我们按照示例一步一步来看。

 

如下是工程的结构:

该WCF服务是通过控制台程序(Host)以自宿的形式发布的,绑定使用wsHttpBinding。我们在Client端分别添加

服务引用(add service references)和添加Web引用(add Web Reference )来引用WCF服务。

 

以下是客户端的代码,分别使用添加服务引用和添加Web引用的服务代理来调用WCF的方法: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Yingchao.Client.localhost;
using Yingchao.Client.ServiceReference1;

namespace Yingchao.Client
{
    class Program
    {
        static void Main(string[] args)
        {
            // add service reference's proxy
            Service1Client client = new Service1Client();
            Console.WriteLine(client.GetData(111));

            // add web reference's proxy
            Service1 s = new Service1();
            Console.WriteLine(s.GetData(1234, true));

            Console.Read();
        }
    }
}

 

客户端配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Yingchao.Client.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
  <system.serviceModel>
    <client>
      <!-- 添加服务引用时自动生成 -->
      <endpoint address="http://localhost:8732/service" binding="wsHttpBinding"
          contract="ServiceReference1.IService1" name="WSHttpBinding_IService1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
    <applicationSettings>
      <!-- 添加Web服务引用时自动生成 -->
        <Yingchao.Client.Properties.Settings>
            <setting name="Yingchao_Client_localhost_Service1" serializeAs="String">
                <value>http://localhost:8732/service</value>
            </setting>
        </Yingchao.Client.Properties.Settings>
    </applicationSettings>
</configuration>

服务端配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
    <system.serviceModel>
    <services>
      <service name="Yingchao.Service.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8732/service" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
        <endpoint address ="" binding="wsHttpBinding" contract="Yingchao.Contract.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

 

我们启动服务后,运行客户端,我们看看结果是什么:

 

我们看到这里添加Web服务代理调用WCF的方法的结果没有显示出来,而是出现了"操作超时"错误。

 

那我们更改服务端配置文件的绑定:wsHttpBinding 改成 basicHttpBinding,编译后更新引用的服务。

然后再次运行客户端,我们看看结果:

 我们看到这次2个引用服务都成功调用。可见添加Web服务应该只能使用basicHttpBinding,也许微软是为了向前兼容留下的。

然后,分别添加的服务引用生成的Reference.cs里面生成的代码也不一样。添加服务引用更偏向WCF规则。

 

我查资料也发现跟我想的差不多.(http://social.microsoft.com/Forums/zh-CN/xmlwebserviceszhchs/thread/808d870b-49f1-47ac-b105-4beb580bcec6)

 

时间: 2025-01-29 07:54:30

关于WCF的引用,添加服务和添加web服务的区别的相关文章

ASP.NET创建Web服务、管理Web服务状态

XML Web服务在类实现派生于WebService类的XML Web服务时,可以使用和其他ASP.NET应用程序相同的状态管理选项.WebService类包含许多公共ASP.NET对象,包括Session和Application对象. Application对象提供一个储存运行在Web应用程序中的代码可访问的数据的机制,而Session对象允许数据存储在每客户端会话基础上.如果客户端支持cookies,那么可以使用cookie来识别客户端会话. Session对象中存储的数据只有在WebMet

用AJAX调用SOAP Web服务:构建Web服务客户机

ajax|web|web服务|客户机 [导读]本文介绍如何使用异步 JavaScript 和 XML (Asynchronous JavaScript and XML, AJAX) 设计模式来实现基于 Web 浏览器的 SOAP Web 服务客户机. AJAX 已普遍用于许多知名的 Web 应用程序服务,例如 GMail.Google Maps.Flickr 和 Odeo.com.通过使用异步 XML 消息传递,AJAX 为 Web 开发人员提供了一种扩展其 Web 应用程序价值和功能的途径.这

用AJAX调用SOAP Web服务:构建Web服务客户机(2)

ajax|web|web服务|客户机 WS.Call 对象公开了以下三个方法: •add_handler.向处理链添加请求/响应处理程序.处理程序对象在调用 Web 服务的前后被调用,以支持可扩展的预调用处理和后调用处理. •invoke.将指定的 SOAP.Envelope 对象发送给 Web 服务,然后在接收到响应后调用回调函数.当调用使用文本 XML 编码的文档样式的 Web 服务时,请使用此方法. •invoke_rpc.创建一个封装 RPC 样式请求的 SOAP.Envelope,并将

asp的web服务连接flash web服务

问题描述 求救,最近在做一个音乐网站,需要用asp的web服务和flash的web服务进行通信,然后在flash的web服务那里添加http://localhost/mp3Service.asmx?wsdl结果出现"打开URL'http://localhost/mp3Service.asmx'时出错"但是如果我把asp运行时自动端口的那个asp.netdevelopmentserverurl复制进去就没有问题,谁能告诉我改怎么解决,谢谢! 解决方案 解决方案二:自己顶上!解决方案三:h

ASP.NET创建Web服务之异步Web服务

asp.net|web|web服务|创建|异步 为了改善调用阻碍线程的长期运行的方法的XML Web服务方法的性能,你应该考虑把它们作为异步的XML Web服务方法发布.实现一个异步XML Web服务方法允许线程在返回线程池的时候执行其他的代码.这允许增加一个线程池中的有限数目的线程,这样提高了整体性能和系统的可伸缩性. 通常,调用执行输入/输出操作的方法的XML Web服务方法适于作为异步实现.这样的方法的例子包括和其他的XML Web服务通讯.访问远程数据库.执行网络输入/输出和读写大文件方

用AJAX调用SOAP Web服务:构建Web服务客户机(1)

ajax|web|web服务|客户机 本文介绍如何使用异步 JavaScript 和 XML (Asynchronous JavaScript and XML, AJAX) 设计模式来实现基于 Web 浏览器的 SOAP Web 服务客户机. AJAX 已普遍用于许多知名的 Web 应用程序服务,例如 GMail.Google Maps.Flickr 和 Odeo.com.通过使用异步 XML 消息传递,AJAX 为 Web 开发人员提供了一种扩展其 Web 应用程序价值和功能的途径.这里介绍的

用AJAX调用SOAP Web服务:构建Web服务客户机(3)

ajax|web|web服务|客户机 一个简单示例 我已经提供了一个示例项目来阐释 Web Services JavaScript Library 的基本功能.该演示所使用的 Web 服务(如清单 10 所示)已经在 WebSphere Application Server 中进行了实现,并提供了简单的 Hello World 功能. 清单 10. 一个简单的基于 Java 的"Hello World"Web 服务 package example; public class Hello

ASP.NET+XML Web服务客户端创建Web服务

asp.net|web|web服务|xml|创建|客户端 XML Web服务是一个提供特别的功能元素的可编程实体,比如应用程序逻辑,并且可以使用普遍存在的Internet标准例如XML和HTTP访问许多潜在的完全不同的系统.XML Web服务依赖于对XML和其他因特网标准的广泛接受,使用它们来创建支持应用程序互操作性的基础结构,解决了许多过去阻碍互操作性的问题. XML Web服务可在单个应用程序中使用,也可国际互联网被许多应用程序使用.因为一个XML Web服务可通过一个标准接口访问,所以它允

关于ASP.NET WEB服务模板和web 服务??

问题描述 在vs2005中,如何创建web服务?一个方法是建一个asp.net web服务(新建网站)另一个是"新建文件"---web服务这两个方法有什么区别?用后一个方法创建的web服务如何调用?? 解决方案 解决方案二:这个简单啊,网上搜一下就得到答案了.解决方案三:lz要干嘛?

怎样在J2EE组件中引用和查找Web服务

j2ee|web|web服务 本文将讨论怎么在J2EE组件中引用Web服务.并且通过JNDI来查找Web服务.在内容组织上,首先把一个EJB2.1无状态会话Bean发布成Web服务,然后开发基于JSP的Web服务客户端,最后着重介绍怎么在JSP的部署时引用Web服务,并且讨论怎么通过JNDI来查找和调用Web服务.阅读本文前您需要以下的知识和工具:J2EE1.4 SDK,并且会初步使用:掌握基本的JAX-RPC Web服务开发技能:了解JNDI的基本知识,能够使用它进行简单编程:一般的Java编