无配置实现WCF的调用

在vs中创建空的解决方案

1.先创建一个类库,用来定义服务契约

添加引用:“System.ServiceModel”

HelloService:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace HelloService
{
    public class HelloService:IHelloService
    {
        /// <summary>
        /// 打招呼
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public string SayHello(string name)
        {
            return name + ":你好";
        }
    }
}

IHelloService:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;

namespace HelloService
{
    /// <summary>
    /// 服务契约
    /// </summary>
    [ServiceContract]
    public interface IHelloService
    {
        /// <summary>
        /// 服务操作
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        [OperationContract]
        string SayHello(string name);
    }
}

2.创建一个控制台应用程序

添加引用:“System.ServiceModel”

添加项目引用, 引用项目”HelloService“

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace HelloServiceHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MyHelloHost Host = new MyHelloHost())
            {
                Host.open();
                Console.Read();
            }
        }
    }

    public class MyHelloHost:IDisposable
    {
        /// <summary>
        /// 定义一个服务对象
        /// </summary>
        private ServiceHost _myhost;

        /// <summary>
        /// 定义一个基地址
        /// </summary>
        public const string BaseAddress = "net.pipe://localhost";
        /// <summary>
        /// 可选地址
        /// </summary>
        public const string HelloServiceAddress = "Hello";

        // 服务契约实现类型
        public static readonly Type ServiceType= typeof(HelloService.HelloService);
        //服务契约接口
        public static readonly Type ContractType = typeof(HelloService.IHelloService);
        /// <summary>
        ///服务定义一个绑定
        /// </summary>
        public static readonly Binding hellobinding = new NetNamedPipeBinding();
        /// <summary>
        /// 构造服务对象
        /// </summary>
        protected void CreateHelloServiceHost()
        {
            //创建服务对象
            _myhost = new ServiceHost(ServiceType, new Uri[] { new Uri(BaseAddress) });
            //添加终结点
            _myhost.AddServiceEndpoint(ContractType, hellobinding, HelloServiceAddress);
        }

        public ServiceHost Myhost
        {
            get { return _myhost; }
        }

        /// <summary>
        /// 打开服务方法
        /// </summary>
        public void open()
        {
            Console.WriteLine("开始启动服务……");
            _myhost.Open();
            Console.WriteLine("服务已经启动……");
        }

        //构造方法
        public MyHelloHost()
        {
            CreateHelloServiceHost();
        }

        //销毁服务宿主对象实例
        public void Dispose()
        {
            if (_myhost!=null)
            {
                (_myhost as IDisposable).Dispose();
            }
        }
    }
}

3.创建一个控制台应用程序

添加引用:“System.ServiceModel”

添加项目引用, 引用项目”HelloService“

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.ServiceModel.Channels;
using HelloService;
namespace HelloClient1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (HelloProxy proxy = new HelloProxy())
            {
                //利用代理调用服务
                Console.WriteLine(proxy.Say("张三"));
                Console.Read();
            }
        }
    }

    //硬编码定义服务契约
    interface IService
    {
        //服务操作
        [OperationContract]
        String Say(String name);
    }

    class HelloProxy : ClientBase<IHelloService>, IService
    {
        //硬编码定义绑定
        public static readonly Binding HelloBinding = new NetNamedPipeBinding();
        //硬编码定义地址
        public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello"));

        //构造方法
        public HelloProxy():base(HelloBinding,HelloAddress)
        { 

        }

        public String Say(String name)
        {
            //使用channel属性对服务进行调用
            return Channel.SayHello(name);
        }
    }
}

时间: 2024-10-13 04:19:50

无配置实现WCF的调用的相关文章

记录:Web无引用无配置方式动态调用WCF服务

这几年一直用WebApi较多,最近项目中有个需求比较适合使用WCF,以前也用过JQuery直接调用Wcf的,但是说实话真的忘了… 所以这次解决完还是花几分钟记录一下 WCF服务端:宿主在现有Win服务中,在服务启动时添加代码 ,服务代码就不用写了,接口和实现按照契约实现即可 private ServiceHost serviceHost = null; //服务宿主 //启动WCF服务 if (serviceHost != null) { serviceHost.Close(); } servi

转载——Java与WCF交互(二):WCF客户端调用Java Web Service

在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttpBinding可行,而NetTcpBinding不可行,具体原因待查.昨晚回去重新测试WCF客户端调用Java Web Service,并将过程公布如下: 其实本不需要做web service,只是原来公开的经典的Web service像(http://soapinterop.java.sun.com/rou

WCF多种调用方式兼容

原文:WCF多种调用方式兼容 1.能被ajax get 2.能post 3.wcf正常调用 实现: 1 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 2 [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")] 3 public class WCFJsonTest :

WCF初探-10:WCF客户端调用服务

创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: 服务和客户端使用托管属性.接口和方法对协定进行建模. 若要连接客户端应用程序中的服务,则需要获取该服务协定的类型信息.通常,我们使用Svcutil.exe(ServiceModel Metadata Utility Tool)来完成,也可以直接在客户端项目上引用服务地址完成.它们会从服务中下载元数据

(转)WCF中调用WebService出错,大家帮忙看看,回答就有分

http://bbs.csdn.net/topics/390542345 在WCF项目里面添加了一个WebService引用,然后在我们调用这个WCF服务时,老出错,提示在 ServiceModel 客户端配置部分中,找不到引用协定“HISInterfaceService.SmsAPIPortType”的默认终结点元素.这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素.我在网上也搜了一下这个错误,也在配置文件中添加了WebService的终结点什么的,求

WCF系列之WCF服务调用方式

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用. 通过SvcUtil.exe的方式调用服务 SvcUtil.exe是一个命令行工具,位于:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目录下,可以将SvcUtil.exe添加到VS2010中方便以后的运用,添加方式:在VS2010的Tools菜单中选择External T

WCF 服务调用 QueryRun

通过AX2012的WCF服务调用AX2012的方法时,如果方法里调用了QueryRun对象时,会报错,报错信息如下:System.ServiceModel.FaultException: 无法将类型为“Dynamics.Ax.Application.QueryRun”的对象强制转换为类型“Dynamics.Ax.Application.SysQueryRun”. Server stack trace: 在 System.ServiceModel.Channels.ServiceChannel.H

SQL Sever 2008配置工具中过程调用失败解决方法

刚刚装了VS2013,然后打开数据库时,无论如何也连不上.打开数据库配置,出现如下界面: 上网搜了,试了很多方法,像什么把windows\system32\wbem下的framedyn.dll复制到system32目录下,还有照一个老外说的,下什么更新补丁,都没用!! 想重装SQL2008,结果运行安装程序,变成了英文版(以前装显示的是中文的),而且安装根目录选不了!巨想死! 万念俱灰下,打开360,卸载了一个叫"Microsoft SQL Server 2012LocalDB",重新

JBOSS 数据源配置并使用JNDI调用

场景分析: 某天系统的数据库维护方要求进行DG备库容灾演练,要把生产用RAC库模拟宕机并转移至DG备库上,由于是failover而不是switchover演练,于是期间不对外开放apache访问,要求服务启动时间较紧. 数据库的切换导致IP的变更,这样导致ap上正在跑的系统不得不重新配置数据库连接,基于目前的机制需要执行以下步骤: a).停止服务群组 b).移除服务包 c).源服务包替换配置文件(这样还要求服务包的当前版本备份完好) d).重新上传服务包 e).分发至群组,最后启动群组 f).当