WCF简单的创建以及发布

Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
是Windows平台上开发分布式应用最佳的实践方式。它是.NET框架的一部分,由 .NET Framework3.0 开始引入,与Windows Presentation Foundation及Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库

1.契约(ServiceContract):契约是属于一个服务公开的公共接口,定义了服务端公开的服务方法、使用的传输协议、可访问的地址以及传输的消息格式等。既契约告诉我们能干什么
2.地址(Address): 在WCF框架中,每个服务都具有唯一的地址,其他服务或者客户端通过这个地址可以访问到这个服务。
3.绑定(Binding): 绑定定义了服务与外部通信的方式。它由一组称为绑定元素的元素而构成,这些元素组合在一起形成通信基础结构。
4.终结点(EndPoint): 终结点是用来发送或接收消息(或同时执行这两种操作)的构造。一个终节点由三个要素组成,分别是:地址、绑定和契约。

宿主(Host):WCF服务必须承载于某个进程中。宿主是控制服务的生存期的应用程序。

 

1. Host in IIS

IIS 中需要配置相关知识点:https://www.cnblogs.com/GeneralKING/p/5969466.html

新建一个WcfTest的wcf程序,web.config配置如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="WcfTest.Service1">
        <endpoint address="" binding="basicHttpBinding" contract="WcfTest.IService1">
        </endpoint>
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
        在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>
复制代码

 

发布到iis 通过浏览相应的svc文件即可 (http://142.31.41.38:8090/Service1.svc),调用的时候直接应用相关的服务地址即可

2. Host in Windows Console App

新建windows console 应用程序,添加对于WcfTest的引用,在program.cs文件中写入

            ServiceHost host = new ServiceHost(typeof(WcfTest.Service1)); //将服务寄宿在宿主中
            host.Open();//运行
            Console.WriteLine("服务已启动、、、");
            Console.ReadKey(true);
            host.Close();

 

添加App.config

复制代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
        <behavior name="behaviorConfiguration">
          <serviceMetadata httpGetEnabled="true"/>
          <!--给behaviorConfiguration定义一些行为-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <!--配置一个服务(注意:这里可以配置多个服务)-->
      <service name="WcfTest.Service1" behaviorConfiguration="behaviorConfiguration">
        <!--name为服务的名称,behaviorConfiguration给这个服务定义一些行为-->
        <host>
          <baseAddresses>
            <add baseAddress="http://127.0.0.1:9090/"/>
            <!--服务的访问地址-->
          </baseAddresses>
        </host>
        <!--终结点由地址,绑定,契约-->
        <endpoint address="" binding="basicHttpBinding" contract="WcfTest.IService1">
        </endpoint>
      </service>

    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
        在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>
复制代码

 

启动host程序:

调用该服务: 添加服务引用 地址 http://127.0.0.1:9090/

 

posted @   小布雷  阅读(772)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示