当前位置:首页 > 虚拟主机 > 正文

如何配置WCF服务端?WCF服务端配置教程详解

WCF (Windows Communication Foundation) 服务端配置主要包括配置文件(如 web.config 或 app.config)的设置和代码实现,以下是详细配置步骤和示例:

如何配置WCF服务端?WCF服务端配置教程详解 第1张

配置文件设置 (web.config / app.config)

在配置文件中定义服务、终结点、绑定和行为:

如何配置WCF服务端?WCF服务端配置教程详解 第2张

<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 托管(推荐)

  1. 创建 .svc 文件(如 MyService.svc): <%@ ServiceHost Service="MyNamespace.MyService" CodeBehind="MyService.svc.cs" %>
  2. 将配置写入 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 检查元数据是否发布成功。

如何配置WCF服务端?WCF服务端配置教程详解 第3张

0