如何配置WCF服务端?WCF服务端配置教程详解
- 虚拟主机
- 2026-02-08
- 4313
WCF (Windows Communication Foundation) 服务端配置主要包括配置文件(如 web.config 或 app.config)的设置和代码实现,以下是详细配置步骤和示例:

配置文件设置 (web.config / app.config)
在配置文件中定义服务、终结点、绑定和行为:

<configuration> <system.serviceModel> <!-- 服务配置 --> <services> <service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior"> <!-- 服务终结点 --> <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService" /> <!-- 元数据交换终结点(用于生成客户端代理) --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <!-- 基地址(IIS托管时可省略) --> <host> <baseAddresses> <add baseAddress="http://localhost:8733/MyService/" /> </baseAddresses> </host> </service> </services> <!-- 绑定配置(可选) --> <bindings> <basicHttpBinding> <binding name="LargeMessageBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"> <readerQuotas maxArrayLength="2147483647" /> </binding> </basicHttpBinding> </bindings> <!-- 行为配置 --> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <!-- 允许通过HTTP获取元数据 --> <serviceMetadata httpGetEnabled="true"/> <!-- 调试时返回异常详情 --> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
关键配置说明:
- <service>:定义服务实现类(name="MyNamespace.MyService")。
- <endpoint>:
- address:终结点地址(空表示使用基地址)。
- binding:通信协议(如 basicHttpBinding、wsHttpBinding、netTcpBinding)。
- contract:服务契约接口(IMyService)。
- <behavior>:
- serviceMetadata:启用元数据发布(客户端生成代理需要)。
- serviceDebug:开发阶段开启异常详情。
服务代码实现
服务契约(接口):
[ServiceContract] public interface IMyService { [OperationContract] string GetData(int value); }
服务实现类:
public class MyService : IMyService { public string GetData(int value) { return $"You entered: {value}"; } }
服务托管方式
IIS 托管(推荐)
- 创建 .svc 文件(如 MyService.svc): <%@ ServiceHost Service="MyNamespace.MyService" CodeBehind="MyService.svc.cs" %>
- 将配置写入 web.config。
自托管(控制台/WinForms)
在 Program.cs 中启动服务:
using (ServiceHost host = new ServiceHost(typeof(MyService))) { host.Open(); Console.WriteLine("Service running..."); Console.ReadLine(); host.Close(); }
高级配置场景
自定义绑定(如大文件传输)
<bindings> <basicHttpBinding> <binding name="LargeFileBinding" maxReceivedMessageSize="2147483647" transferMode="Streamed"> </binding> </basicHttpBinding> </bindings>
启用HTTPS
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService" /> <bindings> <wsHttpBinding> <binding name="HttpsBinding"> <security mode="Transport"> <transport clientCredentialType="None"/> </security> </binding> </wsHttpBinding> </bindings>
跨域支持(RESTful服务)
<endpoint address="" binding="webHttpBinding" contract="MyNamespace.IMyService" behaviorConfiguration="webBehavior" /> <behaviors> <endpointBehaviors> <behavior name="webBehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors>
常见问题解决
- 元数据访问失败:确保已添加 mex 终结点并启用 serviceMetadata。
- 413请求过大:调整 maxReceivedMessageSize 和 readerQuotas。
- 跨协议调用:客户端绑定必须与服务端一致(如 basicHttpBinding)。
- 权限问题:自托管时以管理员权限运行,或使用 netsh 添加URL保留: netsh http add urlacl url=http://+:8733/MyService/ user=Everyone
完整示例结构
项目目录/ │ ├── MyService.svc # IIS入口文件 ├── web.config # 配置文件 ├── App_Code/ │ └── MyService.cs # 服务实现代码 │ └── bin/ # 编译输出
通过以上步骤,您的WCF服务即可正常运行,测试时可通过访问 http://localhost:端口/MyService.svc?wsdl 检查元数据是否发布成功。
