首页 > 编程语言 >【C#】关于WCF你需要知道的!

【C#】关于WCF你需要知道的!

时间:2024-04-07 15:33:25浏览次数:34  
标签:Web Service C# Visual Studio 关于 WCF config

虽然 WCF(Windows Communication Foundation) 已经不在是C#的最新技术,但很多老项目依然在用WCF。这边文章会让你快速知道WCF相关的知识。

1. 环境

以下是我的开发环境:

Visual Studio 2017

Dotnet framework 4.8

 

记得启动Windows Features.

 

 

 

2. 一个简单的WCF案例

微软提供了完整了WCF的文档,你可以从Windows Communication Foundation (WCF) samples 中微软的文档,也可以直接跳转到文档的Getting Started Sample。一步步的建好class文件,svc文件,以及web.config文件。

 

其中Web.config文件中的 endpoint 表示的是service的进入点,这个非常重要。如果没有给service配置endpoint的话, wcf就不知道暴漏出那些svc,service也就无法访问。

 

3. 使用Visual studio创建WCF

 这里我会使用Visual Studio 来创建一个WCF程序。

 然后你会看见项目文件IService1.cs, Service1.svc, Web.config

 Service1.svc文件内容,可以看出WcfService1.Service1的CodeBehind是Service1.svc.cs

而 Service1.svc.cs 有实现自 IService1.cs

 

 要运行起来可以按下F5,便可以运行

 然后会跳出WCF Test Client ,你就可以在这里测试你的WCF程序啦。

4. 使用WcfTestClient.exe程序来测试你的程序

如果你的Visual Studio 不是2017的话,你按F5很可能打不开WCF Test Client.  这时候你可以在你本地找到WcfTestClient.exe程序,然后手动打开进行测试。可以参考 WCF Test Client (WcfTestClient.exe)   WCFTestClient 的在每个人的本地有点不同,笔者本地可以在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\WcfTestClient.exe  目录下找到。

 

5. 通过Visual Studio 发布的WCF 直接部署到IIS上

通过  Visual Studio 发布后的WCF,在Web.config中是没有给Service配置Endpoint的。所以托管到IIS后,默认是可以打开的,但如果不能打开,可以配置endpoint。

 发布后的文件,

打开Web.config

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <appSettings>
 4     <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
 5   </appSettings>
 6   <system.web>
 7     <compilation targetFramework="4.8" />
 8     <httpRuntime targetFramework="4.8" />
 9   </system.web>
10   <system.serviceModel>
11     <behaviors>
12       <serviceBehaviors>
13         <behavior>
14           <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
15           <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
16           <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
17           <serviceDebug includeExceptionDetailInFaults="false" />
18         </behavior>
19       </serviceBehaviors>
20     </behaviors>
21     <protocolMapping>
22       <add binding="basicHttpsBinding" scheme="https" />
23     </protocolMapping>
24     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
25   </system.serviceModel>
26   <system.webServer>
27     <modules runAllManagedModulesForAllRequests="true" />
28     <!--
29         To browse web app root directory during debugging, set the value below to true.
30         Set to false before deployment to avoid disclosing web app folder information.
31       -->
32     <directoryBrowse enabled="true" />
33   </system.webServer>
34 </configuration>
35 <!--ProjectGuid: 5E6D2C78-A51C-4AE4-9FB6-324936C66DCD-->

可以看出并没有给Service配置任何Endpoint, 部署到IS后,默认可以打开。

 如果你遇到Service无法访问,这时候可以手动给Web.config的Service加上endpoint, 显示指定让Service暴漏出去让网络可以访问。

 

 

然后需要配置Service 和 behavior

1       <service
2           name="WcfService1.IService1"
3           behaviorConfiguration="TestServiceBehavior">
4         <endpoint address="mex"
5                   binding="mexHttpBinding"
6                   contract="IMetadataExchange" />
7       </service>

需要注意IMetadadtaExchange是内置的contact类型,你可以直接使用。和hebavior

        <behavior name="TestServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>

更改后,完整的Web.config如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <appSettings>
 4     <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
 5   </appSettings>
 6   <system.web>
 7     <compilation targetFramework="4.8" />
 8     <httpRuntime targetFramework="4.8" />
 9   </system.web>
10   <system.serviceModel>
11     <services>
12       <service
13           name="WcfService1.IService1"
14           behaviorConfiguration="TestServiceBehavior">
15         <endpoint address="mex"
16                   binding="mexHttpBinding"
17                   contract="IMetadataExchange" />
18       </service>
19     </services>
20 
21 
22     <behaviors>
23       <serviceBehaviors>
24         <behavior name="TestServiceBehavior">
25           <serviceMetadata httpGetEnabled="True"/>
26           <serviceDebug includeExceptionDetailInFaults="False" />
27         </behavior>
28 
29         <behavior>
30           <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
31           <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
32           <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
33           <serviceDebug includeExceptionDetailInFaults="false" />
34         </behavior>
35       </serviceBehaviors>
36     </behaviors>
37 
38     <protocolMapping>
39       <add binding="basicHttpsBinding" scheme="https" />
40     </protocolMapping>
41 
42     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
43 
44   </system.serviceModel>
45   <system.webServer>
46     <modules runAllManagedModulesForAllRequests="true" />
47     <!--
48         To browse web app root directory during debugging, set the value below to true.
49         Set to false before deployment to avoid disclosing web app folder information.
50       -->
51     <directoryBrowse enabled="true" />
52   </system.webServer>
53 </configuration>
54 <!--ProjectGuid: 5E6D2C78-A51C-4AE4-9FB6-324936C66DCD-->
View Code

 

标签:Web,Service,C#,Visual,Studio,关于,WCF,config
From: https://www.cnblogs.com/HDK2016/p/18113374

相关文章

  • vscode选中内容一键转换大小写
    可以通过在VisualStudioCode中配置`keybindings.json`文件来实现通过按键组合进行大小写转换的功能。你可以按照以下步骤操作:1.打开VisualStudioCode。2.点击顶部菜单中的"文件(File)"。3.选择"首选项(Preferences)"。4.选择"键绑定(KeyboardShortcuts)"。5.......
  • Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)
    演示站点: https://ai.uaai.cn 对话模块官方论坛: www.jingyuai.com 京娱AI一、AI技术创业内容策展业务有哪些机会?人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展,未来AI技术方面会有哪些创业机......
  • c4d卡顿
    设置->时间和语言->语言->首选语言->选项->键盘->微软拼音->选项->常规->兼容性->开......
  • Oracle 实现当月日历
    selectmax(su)su,max(mo)mo,max(tu)tu,max(we)we,max(th)th,max(fr)fr,max(sa)safrom(selectcasewhend=1thenddendsu,casewhend=2thenddendmo,casewhend=3thenddendtu,casewhend=4thenddendwe,casewhend=5t......
  • 关于layui的单图片上传遇坑-field-input-name问题解决
    直接上代码注意field:'ymftimage'layui.use(function(){varupload=layui.upload;varlayer=layui.layer;varelement=layui.element;var$=layui.$;//单图片上传varuploadInst=upload.render({elem:'#ID-upload-demo-btn',......
  • C#开发之WPF项目中权限控制的实现(attribute)
    1功能描述实现一个权限检查机制,以确保用户根据其权限级别进行相应的操作。定义四级权限:Operator,Maintenance,Supervisor,Administrator,每一级权限都有其特定的操作范围。能够根据用户的权限级别判断用户是否有权执行特定的操作。2设计分析如果实现为接口形式,那么每次在需......
  • 单片机 Mooc 课程讨论区问题集锦
    单片机Mooc课程讨论区问题集锦单片机和嵌入式系统的根本区别和联系是什么?答:单片机和嵌入式系统的根本区别在于是否使用操作系统,没有采用OS的32位的ARM处理器就是32位单片机。在没有学过微机原理的情况下学习单片机要注意哪些问题?答:该课程就是给没有计算机基础的......
  • 从数组创建二叉树-Leetcode测试用
    Leetcode里和二叉树相关的题目,都是用一个数组表示二叉树的,而这个数组是按照层次优先顺序给出的,连其中的空结点也表示了出来,刚好就是2^N-1个结点,N表示层数。但数组毕竟无法和二叉树一样具有链式结构,无法进行算法测试,因此尝试直接通过这样的数组构建二叉树。通过数组创建这样的二......
  • .net core中EF core的环境搭建
    //数据上下文MyDbContext.csusingMicrosoft.EntityFrameworkCore;namespaceLearn00.Models{publicclassMyDbContext:DbContext{//摘要://把Employees{get;set;},理解成是一个容器//用来存放Employee类型的实体,该实......
  • windows服务器间文件同步--Syncthing
    一、说明:Syncthing免费且开源,跨平台支持Windows、Mac、Linux、Android等主流平台,除了PC、手机以外,在部分路由器、树莓派等硬件上都能轻松运行,它将以网页版的形式呈现,并且Syncthing还提供了中文界面的支持。二、下载官网下载地址:https://syncthing.net/downloads/按照自......