zoukankan      html  css  js  c++  java
  • WCF的简单使用

    WCF简单介绍

    WCF(windows communication foundation)是微软推出的数据通信的统一编程模型,在WCF有四个主要的关键点:

    abcd

    Address(地址):定义服务的地址

    Binding(绑定):定义通信的方式(传输协议等)

    Contract(契约):定义服务的具体实现

    enDpoint(终结点):由上面的abc共同构成终结点,用于服务端和客户端进行通信

    WCF服务器创建

    核心的dll:system.ServiceModel

    由于WCF是面向服务的,面向接口的,所以首先需要创建一个服务接口

    1.创建一个接口类IWCFTestService作为服务契约

    2.创建一个接口的具体实现类WCFTestService

    3.到此为止服务已经编写好了,接下来就是将这个服务放到宿主上,就可以作为服务被调用了。接下来创建一个控制台程序Host作为宿主。

     class Program
        {
            static void Main(string[] args)
            {
                //将服务启动起来
                using(ServiceHost host=new ServiceHost (typeof(BLL.WCFTestService)))
                {
                  host.Open();
                  Console.WriteLine("服务已经启动");
                  Console.ReadKey();
                  host.Close();
                }
            }
        }

    4.契约部分已经编写完毕,然后就是address、binding、endpoint,这些都是在配置文件中进行配置

    <configuration>
      <system.serviceModel>
        <services>
          <service name="BLL.WCFTestService" behaviorConfiguration="behaviorConfiguration">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:9000/"/>
              </baseAddresses>
            </host>
            <endpoint address="http://localhost:9000/" binding="basicHttpBinding" contract="IBLL.IWCFTestService">
            </endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="behaviorConfiguration">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

    5.启动控制台程序将服务挂起,然后在浏览器中输入终结点网址,http://localhost:9000/,如下所示,表示服务创建成功

     

    6.接下来新建一个客户端,WindowsForm程序对创建的服务进行测试。可以直接跟WebService程序一样直接添加服务引用,系统生成代理类,然后调用相应的api

     private void button1_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(txtOne.Text) || string.IsNullOrEmpty(txtTwo.Text))
                {
                    MessageBox.Show("请输入正确的数字");
                }
                else
                {
                    double one = double.Parse(txtOne.Text);
                    double two = double.Parse(txtTwo.Text);
                    WCFServiceReference.WCFTestServiceClient client = new WCFServiceReference.WCFTestServiceClient();
                   double result= client.Add(one,two );
                   txtResult.Text = result.ToString();
                }
            }

     7.补充

    WCF可以寄宿在任意类型的项目中,如何将WCF服务发布到IIS中去呢,只要创建一个空的web应用程序,然后将这个应用程序发布到IIS中就可以了,你需要在这个web项目中,添加一个“WCF服务”,这是一个一svc为后缀名的文件,添加后系统会默认的创建出契约的接口和实现类。只需要将服务的逻辑添加上,并修改配置文件即可。如果你希望将WCF寄宿到WindowsForm中去,最好不要将启动服务的代码写在Form()初始化中,应该写到Program.cs中,这样可以有效的避免,UI线程堵塞。

    上面我们已经创建好了契约,那么如何将我们已经写好的契约添加到空的Web应用程序中呢?

    1.添加一个文件。同时将文件的后缀名修改为svc,文件内容:

    <%@ ServiceHost Service="BLL.WCFTestService" %>

    2.配置web.config文件

    <configuration>
      <system.serviceModel>
        <services>
          <service name="BLL.WCFTestService" behaviorConfiguration="behaviorConfiguration">
            <endpoint binding="basicHttpBinding" contract="IBLL.IWCFTestService">
            </endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="behaviorConfiguration">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

    上面的配置文件中,没有对address进行配置,因为当部署到IIS上的时候,会为程序分配地址和端口号,服务默认的使用IIS的地址

  • 相关阅读:
    Flink集群模式部署及案例执行
    Solr查询解析及内核剖析
    Spark Streaming流计算核心概念
    Kaldi语音识别CVTE模型实战
    Kaldi基础代码库及建模
    Kaldi样例实战
    Solr文本分析剖析【文本分析、分词器详解、自定义文本分析字段及分词器】
    Flink场景分析与比较【事件驱动、数据分析、数据管道】
    什么是Apache Flink实时流计算框架?
    基于Tesseract实现图片文字识别
  • 原文地址:https://www.cnblogs.com/XZhao/p/7301640.html
Copyright © 2011-2022 走看看