Visual Studio2012中搭建WCF项目

分布式系统:指在系统与系统之间进行通信,系统不再是孤立的,例如:淘宝查看物流信息,或是hao123的天气预报,这些可能都是用的别的系统的web方法。

1.创建空的解决方案

2.新建项目-WCF服务库项目,项目名称:XfrogWCFService

3.在XfrogWCFService项目中添加[System.ServiceModel]的引用

4.上图是该项目的结构打开IFirstServices.cs这个是接口也是一个服务契约,客户端调用方法都必须遵守,代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace XfrogWCFService
{
        /// <summary>
        /// 注意在接口上申明了ServiceContract特性,即服务契约,表明该接口是一个服务
        /// </summary>
        [ServiceContract]
        public interface IFirstService
        {
            /// <summary>
            /// 表示该方法是IFirstService的一个服务方法,客户端可远程调用该方法。
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            [OperationContract]
            String GetData(int a,int b);
        }
}

5.再打开FiretService.cs这个文件对接口进行实现,也就是Web方法所要实现的功能,为了学习,做了一个两数相加的操作,代码如下。

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

namespace XfrogWCFService
{
   public class FirstService : IFirstService
    {
        string IFirstService.GetData(int a,int b)
        {
            return String.Format("{0}+{1}={2}",a,b,(a+b));
        }
    }
}

6.下面我们在解决方案中重新建立一个【客户端控制台应用程序】的项目,名称叫做Host,这是web服务的主人[宿主],意思是该服务的启动或者关闭都归它来控制。

7.我们的解决方案成了上面的结构,也同样要添加[System.ServiceModel]的引用,还有对XfrogWCFService的引用,然后打开Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using XfrogWCFService;
namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {   //这段代码说创建一个新的服务宿主,这个服务是FirstService
            //也就是实现IFirstService接口的类
            using (ServiceHost host = new ServiceHost(typeof(FirstService)))
            {
                host.Open();
                Console.WriteLine("服务已启动,按任意键中止...");
                Console.ReadKey(true);
                host.Close();
            }
        }
    }
}

8.接下来打开Host项目中的App.config文件,应该是会添加ServiceModel节点,如下面:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  <system.serviceModel>
    <services>
      <service name="XfrogWCFService.FirstService" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
            <add baseAddress="http://192.168.10.58:8100/"/>
          </baseAddresses>
        </host>
        <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
                  contract="XfrogWCFService.IFirstService"
                  name="BasicHttpBinding_IFirstService"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfiguration">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

9.现在服务这边应该就是搭建好了,可以测试下,运行Host项目:如果是这样代表服务已经搭建成功了!

------------------------------------下面是客户端的哦-----------------------------------------

 1.重新在别的地方建立一个解决方案,然后创建一个类库名称是Clinent1。

 2.添加webService引用,步骤是:

   2.1右击【引用】点击【添加服务引用】然后如下图:

   地址是我们在wcf服务器端App.config页面写的地址将ip换成localhost

   点击转到会查看到这个地址的服务

   命名空间可以修改,这个是我们调用服务的命名空间,然后点击【确定】

  

 3.给Clinent1添加ServiceModel引用。

 4.在Clinent1中新建一个类Program.cs代码如下。

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

namespace Clinent1
{
    public class Program
    {
        /// <summary>
        /// WCF调用方法
        /// </summary>
        /// <param name="par"></param>
        /// <returns></returns>
        public string getwcfstr(int a,int b)
        {
            ServiceReference1.FirstServiceClient aa = new ServiceReference1.FirstServiceClient();
            return aa.GetData(a, b);//调用服务服务器接口的方法。
        }
    }
}

5.在该解决方案中创建一个新的网站项目,添加ServiceModel和Clinent1的引用。

6.Clinent1的App.config如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IFirstService" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService"
                name="BasicHttpBinding_IFirstService" />
        </client>
    </system.serviceModel>
</configuration>

7.web.Config在configuration下添加,代码如下:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFirstService" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService"
          name="BasicHttpBinding_IFirstService" />
    </client>
  </system.serviceModel>

8.添加一个aspx页面,前台写个div后台代码如下:

 protected void Page_Load(object sender, EventArgs e)
        {
            Program p=new Program();
//设置div的内容调用服务传递参数 div_wcf.InnerText = p.getwcfstr(10, 5); }

9.客户端的结构是:

 

10.运行WebForm1.aspx的效果:为了测试,做的功能很简单啊。

原文地址:https://www.cnblogs.com/Evan-Pei/p/4347180.html